進行Docker操作前,先建立目錄,我的路徑是d:/docker/mysql,目錄結構如下:

1 --mysql 2 --master 3 --data 4 --conf 5 --my.cnf 6 --slaver 7 --data 8 --conf 9 --my.cnf
1、主從配置文件
Master: my.cnf

1 [mysqld] 2 3 server_id = 1 4 5 log-bin= mysql-bin 6 7 read-only=0 8 9 binlog-do-db=blogging 10 11 replicate-ignore-db=mysql 12 13 replicate-ignore-db=sys 14 15 replicate-ignore-db=information_schema 16 17 replicate-ignore-db=performance_schema 18 19 20 21 !includedir /etc/mysql/conf.d/ 22 23 !includedir /etc/mysql/mysql.conf.d/
Slaver: my.cnf

1 [mysqld] 2 3 server_id = 2 4 5 log-bin= mysql-bin 6 7 read-only=1 8 9 binlog-do-db=blogging 10 11 replicate-ignore-db=mysql 12 13 replicate-ignore-db=sys 14 15 replicate-ignore-db=information_schema 16 17 replicate-ignore-db=performance_schema 18 19 20 21 !includedir /etc/mysql/conf.d/ 22 23 !includedir /etc/mysql/mysql.conf.d/
說明: log-bin :需要啟用二進制日志 server_id : 用於標識不同的數據庫服務器,而且唯一
binlog-do-db : 需要記錄到二進制日志的數據庫 binlog-ignore-db : 忽略記錄二進制日志的數據庫 auto-increment-offset :該服務器自增列的初始值 auto-increment-increment :該服務器自增列增量
replicate-do-db :指定復制的數據庫 replicate-ignore-db :不復制的數據庫 relay_log :從庫的中繼日志,主庫日志寫到中繼日志,中繼日志再重做到從庫 log-slave-updates :該從庫是否寫入二進制日志,如果需要成為多主則可啟用。只讀可以不需要
如果為多主的話注意設置 auto-increment-offset 和 auto-increment-increment 如上面為雙主的設置: 服務器 152 自增列顯示為:1,3,5,7,……(offset=1,increment=2) 服務器 153 自增列顯示為:2,4,6,8,……(offset=2,increment=2)
2、啟動創建主從容器

1 //獲取基礎鏡像 2 3 docker pull mysql 4 5 6 7 //創建並啟動主從容器; 8 9 //master 10 11 docker run --name mastermysql -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=anech -v d:/docker/mysql/master/data:/var/lib/mysql -v d:/docker/mysql/master/conf/my.cnf:/etc/mysql/my.cnf mysql 12 13 14 15 //slaver 16 17 docker run --name slavermysql -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=anech -v d:/docker/mysql/slaver/data:/var/lib/mysql -v d:/docker/mysql/slaver/conf/my.cnf:/etc/mysql/my.cnf mysql
這里為了方便查看數據,把Docker的端口都與本機進行了映射,對應的本地master/data文件夾和slaver/data文件夾下也能看到同步的數據庫文件
3、Master和Slaver設置

1 //進入master容器 2 3 docker exec -it mastermysql bash 4 5 6 7 //啟動mysql命令,剛在創建窗口時我們把密碼設置為:anech 8 9 mysql -u root -p 10 11 12 13 //創建一個用戶來同步數據 14 15 GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456'; 16 17 //這里表示創建一個slaver同步賬號backup,允許訪問的IP地址為%,%表示通配符 18 19 //例如:192.168.0.%表示192.168.0.0-192.168.0.255的slaver都可以用backup用戶登陸到master上 20 21 22 23 //查看狀態,記住File、Position的值,在Slaver中將用到 24 25 show master status;

1 //進入slaver容器 3 docker exec -it slavermysql bash 4 7 //啟動mysql命令,剛在創建窗口時我們把密碼設置為:anech 9 mysql -u root -p 10 13 //設置主庫鏈接 15 change master to master_host='172.17.0.2',master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0,master_port=3306; 16 19 //啟動從庫同步 21 start slave; 22 25 //查看狀態 27 show slave status\G;
說明:
master_host:主庫地址
master_user:主庫創建的同步賬號
master_password:主庫創建的同步密碼
master_log_file:主庫產生的日志
master_log_pos:主庫日志記錄偏移量
master_port:主庫使用的端口,默認為3306