绍兴本地网站建设,做网站找我要服务器密码,妇产医院网络建设公司,麻城建设网站参考了很多博客#xff0c;死磕了几天#xff0c;最终跑起来了#xff0c;不容易#xff0c;晚上喝瓶82年可乐庆祝下。 1、整体文件结构#xff0c;这里忽略log、conf、data映射目录 2、docker-compose.yml文件内容如下#xff1a;
version: 3.3
services:mysql-master… 参考了很多博客死磕了几天最终跑起来了不容易晚上喝瓶82年可乐庆祝下。 1、整体文件结构这里忽略log、conf、data映射目录 2、docker-compose.yml文件内容如下
version: 3.3
services:mysql-master:image: mysqlcontainer_name: mysql-masterhealthcheck:test: [ CMD, mysqladmin, ping, -h, localhost ]interval: 5stimeout: 3sretries: 3environment:MYSQL_ROOT_PASSWORD: 123456MASTER_SYNC_USER: sync_admin #设置脚本中定义的用于同步的账号MASTER_SYNC_PASSWORD: 123456 #设置脚本中定义的用于同步的密码ADMIN_USER: root #当前容器用于拥有创建账号功能的数据库账号ADMIN_PASSWORD: 123456ALLOW_HOST: 10.10.%.% #允许同步账号的host地址TZ: Asia/Shanghai #解决时区问题networks:mysql:ipv4_address: 10.10.10.10 #固定ip因为从库在连接master的时候需要设置hostvolumes:- /root/mysql/master:/docker-entrypoint-initdb.d #挂载master脚本command:- --server-id100- --character-set-serverutf8mb4- --collation-serverutf8mb4_unicode_ci- --log-binmysql-bin- --sync_binlog1mysql-slave1:image: mysqlcontainer_name: mysql-slave1depends_on:mysql-master:condition: service_healthyenvironment:MYSQL_ROOT_PASSWORD: 123456SLAVE_SYNC_USER: sync_admin #用于同步的账号由master创建SLAVE_SYNC_PASSWORD: 123456ADMIN_USER: rootADMIN_PASSWORD: 123456MASTER_HOST: 10.10.10.10 #master地址开启主从同步需要连接masterTZ: Asia/Shanghai #设置时区networks:- mysqlvolumes:- /root/mysql/slave1:/docker-entrypoint-initdb.d #挂载slave脚本command:- --server-id200- --character-set-serverutf8mb4- --collation-serverutf8mb4_unicode_cimysql-slave2:image: mysqlcontainer_name: mysql-slave2depends_on:mysql-master:condition: service_healthyenvironment:MYSQL_ROOT_PASSWORD: 123456SLAVE_SYNC_USER: sync_adminSLAVE_SYNC_PASSWORD: 123456ADMIN_USER: rootADMIN_PASSWORD: 123456MASTER_HOST: 10.10.10.10TZ: Asia/Shanghainetworks:- mysqlvolumes:- /root/mysql/slave2:/docker-entrypoint-initdb.dcommand: #这里需要修改server-id保证每个mysql容器的server-id都不一样- --server-id300- --character-set-serverutf8mb4- --collation-serverutf8mb4_unicode_ci
networks:mysql:driver: bridgeipam:driver: defaultconfig:- subnet: 10.10.0.0/16
3、create_sync_user.sh文件内容如下
#!/usr/bin/env bash
#定义用于同步的用户名
MASTER_SYNC_USER${MASTER_SYNC_USER:-sync_admin}
#定义用于同步的用户密码
MASTER_SYNC_PASSWORD${MASTER_SYNC_PASSWORD:-123456}
#定义用于登录mysql的用户名
ADMIN_USER${ADMIN_USER:-root}
#定义用于登录mysql的用户密码
ADMIN_PASSWORD${ADMIN_PASSWORD:-123456}
#定义运行登录的host地址
ALLOW_HOST${ALLOW_HOST:-%}
#定义创建账号的sql语句
CREATE_USER_SQLCREATE USER $MASTER_SYNC_USER$ALLOW_HOST IDENTIFIED BY $MASTER_SYNC_PASSWORD;
#定义赋予同步账号权限的sql,这里设置两个权限REPLICATION SLAVE属于从节点副本的权限REPLICATION CLIENT是副本客户端的权限可以执行show master status语句
GRANT_PRIVILEGES_SQLGRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO $MASTER_SYNC_USER$ALLOW_HOST;
#定义刷新权限的sql
FLUSH_PRIVILEGES_SQLFLUSH PRIVILEGES;
#执行sql
mysql -u$ADMIN_USER -p$ADMIN_PASSWORD -e $CREATE_USER_SQL $GRANT_PRIVILEGES_SQL $FLUSH_PRIVILEGES_SQL4、slave.sh文件内容如下
#!/usr/bin/env bash
#定义连接master进行同步的账号
SLAVE_SYNC_USER${SLAVE_SYNC_USER:-sync_admin}
#定义连接master进行同步的账号密码
SLAVE_SYNC_PASSWORD${SLAVE_SYNC_PASSWORD:-123456}
#定义slave数据库账号
ADMIN_USER${ADMIN_USER:-root}
#定义slave数据库密码
ADMIN_PASSWORD${ADMIN_PASSWORD:-123456}
#定义连接master数据库host地址
MASTER_HOST${MASTER_HOST:-%}
#连接master数据库查询二进制数据并解析出logfile和pos这里同步用户要开启 REPLICATION CLIENT权限才能使用SHOW MASTER STATUS;
RESULTmysql -u$SLAVE_SYNC_USER -h$MASTER_HOST -p$SLAVE_SYNC_PASSWORD -e SHOW MASTER STATUS; | grep -v grep |tail -n 2| awk {print $1,$2}
#解析出logfile
LOG_FILE_NAMEecho $RESULT | grep -v grep | awk {print $1}
#解析出pos
LOG_FILE_POSecho $RESULT | grep -v grep | awk {print $2}
#设置连接master的同步相关信息
SYNC_SQLchange master to master_host$MASTER_HOST,master_user$SLAVE_SYNC_USER,master_password$SLAVE_SYNC_PASSWORD,master_log_file$LOG_FILE_NAME,master_log_pos$LOG_FILE_POS;
#开启同步
START_SYNC_SQLstart slave;
#查看同步状态
STATUS_SQLshow slave status\G;
mysql -u$ADMIN_USER -p$ADMIN_PASSWORD -e $SYNC_SQL $START_SYNC_SQL $STATUS_SQL5、效果如下
小结 docker版本25.0.0 docker compose版本version v2.24.1新的docker版本自带docker compose不需要额外安装 MySQL镜像版本8.3.0跟老版本有点区别。很多找到的博客是老版本的有点累。