進行Docker操做前,先創建目錄,個人路徑是d:/docker/mysql,目錄結構以下:mysql
1 --mysql 2 --master 3 --data 4 --conf 5 --my.cnf 6 --slaver 7 --data 8 --conf 9 --my.cnf
一、主從配置文件sql
Master: my.cnf docker
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 : 用於標識不一樣的數據庫服務器,並且惟一bash
binlog-do-db : 須要記錄到二進制日誌的數據庫 binlog-ignore-db : 忽略記錄二進制日誌的數據庫 auto-increment-offset :該服務器自增列的初始值 auto-increment-increment :該服務器自增列增量服務器
replicate-do-db :指定複製的數據庫 replicate-ignore-db :不復制的數據庫 relay_log :從庫的中繼日誌,主庫日誌寫到中繼日誌,中繼日誌再重作到從庫 log-slave-updates :該從庫是否寫入二進制日誌,若是須要成爲多主則可啓用。只讀能夠不須要ide
若是爲多主的話注意設置 auto-increment-offset 和 auto-increment-increment 如上面爲雙主的設置: 服務器 152 自增列顯示爲:1,3,5,7,……(offset=1,increment=2) 服務器 153 自增列顯示爲:2,4,6,8,……(offset=2,increment=2)spa
二、啓動建立主從容器3d
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文件夾下也能看到同步的數據庫文件日誌
三、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