User-Profile-Image
hankin
  • 5
  • centos7
  • docker
  • mysql
  • PostgreSQL
  • git/gitlab
  • ELK
  • python
    • python-Tornado
    • python-django
  • redis
  • nginx
  • kvm
  • proxmox
  • mongo
  • kubernetes
  • prometheus
  • GlusterFs
  • nfs
  • freeswitch
  • httpd
  • shell脚本
  • linux
  • fastdfs
  • nextcloud
  • openssl
  • openvpn
  • rabbitmq
  • sqlite
  • svn
  • java
  • ubuntu
  • vue2
  • wordpress
  • php
  • IOT物联网
  • 项目
  • 故障处理
  • 树莓派
  • 博客存档
  • 未分类
  • 杂项
  • #1742(无标题)
  • 新视野
  • 分类
    • 项目
    • 树莓派
    • 杂项
    • 未分类
    • 新视野
    • 故障处理
    • 博客存档
    • wordpress
    • vue2
    • ubuntu
    • svn
    • sqlite
    • shell脚本
    • redis
    • rabbitmq
    • python-django
    • python
    • proxmox
    • prometheus
    • PostgreSQL
    • php
    • openvpn
    • openssl
    • nginx
    • nfs
    • nextcloud
    • mysql
    • mongo
    • linux
    • kvm
    • kubernetes
    • java
    • IOT物联网
    • httpd
    • GlusterFs
    • git/gitlab
    • freeswitch
    • fastdfs
    • ELK
    • docker
    • centos7
  • 页面
    • #1742(无标题)
  • 友链
      请到[后台->主题设置->友情链接]中设置。
Help?

Please contact us on our email for need any support

Support
    首页   ›   mysql   ›   正文
mysql

docker部署mysql主从集群,一主两从结构shell脚本

2022-11-02 14:51:06
830  0 0
#安装脚本

###############################安装mysql客户端
if [ "$1" == "install_mysql_cli" ];then
    rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
    yum install  --nogpgcheck  mysql-community-client -y
fi

###############################安装主节点
if [ "$1" == "install_mysql_master" ];then
    if [ -d "/mysql_data/mysql_master" ];then
        echo -e "\033[31m '__________________________________  存在mysql_master文件夹,为防止覆盖原有mysql数据,退出安装 ,and EXIT' \033[0m"
        exit 1
    fi
    mkdir -p /mysql_master/{log,data,conf/conf.d}

cat >> /mysql_master/conf/my.cnf <<EOF
[mysqld]
server-id=1
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
log-bin=mysql-bin ##开启⼆进制⽇志
binlog-ignore-db=mysql ## 指定不需要同步的数据库名称

# Custom config should go here
#!includedir /etc/mysql/conf.d/
#skip-log-bin
EOF

    docker run --name mysql_master -itd --network=host --restart=always -v /mysql_master/log:/var/log/mysql -v /mysql_master/data:/var/lib/mysql -v /mysql_master/conf:/etc/mysql -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD=$2 mysql:8.0.30
    sleep 1
    docker ps
    echo -e "\033[32m '>>>>>> mysql master 节点安装完成' \033[0m"
fi

###############################安装从节点1
if [ "$1" == "install_mysql_slave1" ];then
    if [ -d "/mysql_data/mysql_slave1" ];then
        echo -e "\033[31m '__________________________________  存在mysql_slave1文件夹,为防止覆盖原有mysql数据,退出安装 ,and EXIT' \033[0m"
        exit 1
    fi
    mkdir -p /mysql_slave1/{log,data,conf/conf.d}

cat >> /mysql_slave1/conf/my.cnf <<EOF
[mysqld]
server-id=2
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
log-bin=mysql-bin ##开启⼆进制⽇志
binlog-ignore-db=mysql ## 指定不需要同步的数据库名称

# Custom config should go here
#!includedir /etc/mysql/conf.d/
#skip-log-bin
EOF

    docker run --name mysql_slave1 -itd --network=host --restart=always -v /mysql_slave1/log:/var/log/mysql -v /mysql_slave1/data:/var/lib/mysql -v /mysql_slave1/conf:/etc/mysql -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD=$2 mysql:8.0.30
    sleep 1
    docker ps
    echo -e "\033[32m '>>>>>> mysql slave1 节点安装完成' \033[0m"
fi

###############################安装从节点2
if [ "$1" == "install_mysql_slave2" ];then
    if [ -d "/mysql_data/mysql_slave2" ];then
        echo -e "\033[31m '__________________________________  存在mysql_slave2文件夹,为防止覆盖原有mysql数据,退出安装 ,and EXIT' \033[0m"
        exit 1
    fi
    mkdir -p /mysql_data/mysql_slave2/{log,data,conf/conf.d}

cat >> /mysql_data/mysql_slave2/conf/my.cnf <<EOF
[mysqld]
server-id=3
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
log-bin=mysql-bin ##开启⼆进制⽇志
binlog-ignore-db=mysql ## 指定不需要同步的数据库名称

# Custom config should go here
#!includedir /etc/mysql/conf.d/
#skip-log-bin
EOF

    docker run --name mysql_slave2 -itd --network=host --restart=always -v /mysql_data/mysql_slave2/log:/var/log/mysql -v /mysql_data/mysql_slave2/data:/var/lib/mysql -v /mysql_data/mysql_slave2/conf:/etc/mysql -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD=$2 mysql:8.0.30
    sleep 1
    docker ps
    echo -e "\033[32m '>>>>>> mysqlslave2 节点安装完成' \033[0m"
fi

###############################创建slave用户并赋予权限
if [ "$1" == "create_slave_user" ];then
    mysql -h 127.0.0.1 -u root -p$2 -e "CREATE USER 'slave_user'@'%' IDENTIFIED BY '$3';"
    sleep 1
    mysql -h 127.0.0.1 -u root -p$2 -e "GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave_user'@'%';"
fi

###############################查看binlog位置
if [ "$1" == "get_addr" ];then
    mysql -h $2 -u root -p$3 -e "show master status;"
fi

###############################slave配置
if [ "$1" == "init_slave" ];then
    mysql -h $2 -u root -p$3 -e "change master to master_host='$4', master_user='slave_user', master_password='$5', master_port=3306, master_log_file='$6', master_log_pos=$7, master_connect_retry=30;"
fi

###############################查看从库状态
if [ "$1" == "status_slave" ];then
    echo $2 "从库状态如下"
    mysql -h $2 -u root -p$3 -e "show slave status \G;"
fi

###############################启动从库状态
if [ "$1" == "start_slave" ];then
    mysql -h $2 -u root -p$3 -e "start slave;"
fi

```

安装说明

```
docker安装mysql主从集群安装说明

三个节点 主节点(192.168.2.10) 从节点1(192.168.2.11) 从节点2(192.168.2.12)
脚本名称 mysql.txt

# 所有节点执行下载mysql镜像命令
    docker pull mysql:8.0.30

# 在主节点节点安装mysql客户端
    sh mysql.txt install_mysql_cli

# 在主节点执行安装容器
    sh mysql.txt install_mysql_master pas1
        #pas1为自定义的root密码,三个节点使用相同的root密码便于管理

# 在从节点1安装容器
    sh mysql.txt install_mysql_slave1 pas1
        #pas1为自定义的root密码,三个节点使用相同的root密码便于管理

# 在从节点2安装容器
    sh mysql.txt install_mysql_slave2 pas1
        #pas1为自定义的root密码,三个节点使用相同的root密码便于管理

# 在主节点执行创建slave用户并赋予权限
    sh mysql.txt create_slave_user pas1 pas2
        #pas2为集群内部认证密码可以跟root密码设置成一样的

# 在主节点执行查看binlog位置
    sh mysql.txt get_addr 127.0.0.1  pas1
        #其中Filed的值为日志名称, Position值为日志位置

# 在主节点执行针对slave1的配置 
    sh mysql.txt init_slave 192.168.2.11 pas1 192.168.2.10 pas2 日志名称 日志位置 
        #说明: sh mysql.txt init_slave slave1的ip root密码 主节点ip 集群密码 日志名称 日志位置 

# 在主节点执行针对slave2的配置 
    sh mysql.txt init_slave 192.168.2.12 pas1 192.168.2.10 pas2 日志名称 日志位置 

# 在主节点执行查看从库状态
    sh mysql.txt status_slave 192.168.2.11 pas1
    sh mysql.txt status_slave 192.168.2.12 pas1

# 在主节点执行启动从库状态
    sh mysql.txt start_slave 192.168.2.11 pas1
    sh mysql.txt start_slave 192.168.2.12 pas1

# 在主节点执行再次查看从库状态,观察有无错误
    sh mysql.txt status_slave 192.168.2.11 pas1
    sh mysql.txt status_slave 192.168.2.12 pas1

# 写入数据测试
    写入统一使用主机的3306端口
评论 (0)

点击这里取消回复。

欢迎您 游客  

Copyright © 2025 网站备案号 : 蜀ICP备2022017747号
smarty_hankin 主题. Designed by hankin
主页
页面
  • #1742(无标题)
博主
tang.show
tang.show 管理员
linux、centos、docker 、k8s、mysql等技术相关的总结文档
210 文章 2 评论 194507 浏览
测试
测试