1、下载mysql镜像
docker pull mysql:5.7
2、创建Master实例并启动
sudo docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql/master/log:/var/log/mysql \
-v /mydata/mysql/master/data:/var/lib/mysql \
-v /mydata/mysql/master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=zan123456 \
-e TZ=Asia/Shanghai \
-d mysql:5.7 \
--default-time_zone='+8:00'
参数说明
-p 3307:3306 将容器的3306端口映射到主机3307端口
-v /mydata/mysql/master/conf:/etc/mysql 将配置文件夹挂载到主机
-v /mydata/mysql/master/log:/var/log/mysql 将日志文件夹挂载到主机
-v /mydata/mysql/master/data:/var/lib/mysql 将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=zan123456 初始化root用户的密码
-e TZ=Asia/Shanghai 设置容器时区
--default-time_zone='+8:00' mysql的时区
修改master基本配置
vim /mydata/mysql/master/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
注意:skip-name-resolve 一定要加上,不然连接mysql会超级慢
添加master主从复制部分配置
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
#是否只读标记,主有 增删改查 操作
read-only=0
# 设置不要复制的数据库(可设置多个)
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
#设置需要复制的数据库
binlog-do-db=diandimall_ums
binlog-do-db=diandimall_pms
binlog-do-db=diandimall_oms
binlog-do-db=diandimall_sms
binlog-do-db=diandimall_wms
binlog-do-db=diandimall_admin
重启master
3、创建Slave实例并启动
sudo docker run -p 3317:3306 --name mysql-slaver-01 \
-v /mydata/mysql/slaver/log:/var/log/mysql \
-v /mydata/mysql/slaver/data:/var/lib/mysql \
-v /mydata/mysql/slaver/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=zan123456 \
-e TZ=Asia/Shanghai \
-d mysql:5.7 \
--default-time_zone='+8:00'
修改slaver基本配置
vim /mydata/mysql/slaver/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
添加slaver主从复制部分配置
#从服务器唯一ID
server-id=2
#启用二进制日志
log-bin=mysql-bin
#是否只读标记,从只有读操作
read-only=1
# 设置不要复制的数据库(可设置多个)
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
#设置需要复制的数据库
binlog-do-db=diandimall_ums
binlog-do-db=diandimall_pms
binlog-do-db=diandimall_oms
binlog-do-db=diandimall_sms
binlog-do-db=diandimall_wms
binlog-do-db=diandimall_admin
重启slaver
docker restart mysql-master mysql-slaver-01
docker update mysql-master mysql-slaver-01 --restart=always
4、为master授权用户来同步他的数据
1、进入master容器
docker exec -it mysql-master /bin/bash
2、进去mysql内部(mysql -uroot -p)
1)、授权root可以远程访问(主从无关,为了方便我们远程连接mysql)[docker mysql 这一步不需要]
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'zan123456' WITH GRANT OPTION;
flush privileges;
2)、添加用来同步的用户[可以用navicat连上mysql-master执行以下命令]
GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%' IDENTIFIED BY 'zan123456';
3)、查看master状态
show master status\G;
5、配置slaver同步master数据
1、进入slaver容器
docker exec -it mysql-slaver-01 /bin/bash
2、进去mysql内部(mysql -uroot -p)
1)、授权root可以远程访问(主从无关,为了方便我们远程连接mysql)[docker mysql 这一步不需要]
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'zan123456' WITH GRANT OPTION;
flush privileges;
2)、设置主库连接[可以用navicat连上mysql-slaver-01执行以下命令] 10.206.0.14 是内网ip
CHANGE MASTER TO MASTER_HOST='10.206.0.14', MASTER_USER='backup',MASTER_PASSWORD='zan123456',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=0,MASTER_PORT=3307;
3)、启动从库同步
start slave;
4)、查看从库状态
show slave status\G;