1. 程式人生 > >centos7 中利用docker技術實現mysql主從複製

centos7 中利用docker技術實現mysql主從複製

我這是在一臺阿里雲伺服器上安裝docker,啟動兩個mysql容器,實現mysql主從複製功能。

一、環境準備:
MySQL : 5.7
Docker : 1.13.1
CentOS : 7

二、啟動mysql容器
上述文章講過了如何安裝docker和下載mysql映象,下面我們分別啟動兩個容器,一個主,一個從
docker run –name master -p 8091:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /root/wy/yb/docker/sharedir/mysql57:/var/lib/mysql -d docker.io/mysql:5.7

docker run –name slave -p 8092:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /root/wy/yb/docker/sharedir/mysql57slave1:/var/lib/mysql -d docker.io/mysql:5.7

三、在主機上修改配置檔案:vim /etc/my.cnf ,該檔案沒有就會自動新建。
內容如下:
[mysqld]
log-bin=mysql-bin
server-id=1

在從機上修改配置檔案:vim /etc/my.cnf ,該檔案沒有就會自動新建。
內容如下:
[mysqld]
log-bin=mysql-bin
server-id=2

備註:在配置檔案中也可以增加如下:
binlog-do-db=repl #需要同步的資料庫,如果沒有本行表示同步所有的資料庫
binlog-ignore-db=mysql #被忽略的資料

四、使用者訪問許可權
在主機上執行mysql -uroot -p123456,在mysql命令視窗中執行
grant replication slave on .

to ‘root’@’172.17.0.%’ identified by ‘root’;
flush privileges;
備註:表示172.17.0.%段的IP使用root帳戶可以訪問,可以自己新建一個mysql帳戶,表示該帳戶只有備份的許可權

五、退出容器並重啟
退出容器命令:Ctrl+D
重啟容器:docker restart name

六、登入MySQL狀態下,檢視主伺服器狀態
show master status;

File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————-+
| mysql-bin.000001 | 852 |

七、配置從庫連線主庫, 在從庫上執行
在從機上執行mysql -uroot -p123456,在mysql命令視窗中執行

CHANGE MASTER TO
MASTER_HOST=’172.17.0.2’,
MASTER_PORT=3306,
MASTER_USER=’root’,
MASTER_PASSWORD=’123456’,
MASTER_LOG_FILE=’mysql-bin.000001’,
MASTER_LOG_POS=852;

備註:上面這個語句理論上是沒有問題,但因為我是在一個伺服器啟動的兩個docker,上面這個語句執行時主從功能失敗,下面這個語句才可以,下面這個語句使用的是容器對映到的宿主機地址和埠。

CHANGE MASTER TO
MASTER_HOST=’39.108.216.11’,
MASTER_PORT=8091,
MASTER_USER=’root’,
MASTER_PASSWORD=’123456’,
MASTER_LOG_FILE=’mysql-bin.000001’,
MASTER_LOG_POS=852;

最後兩項
MASTER_LOG_FILE 和 MASTER_LOG_POS
在主庫執行 : SHOW MASTER STATUS; 命令可以取得
對應的欄位是 File 和 Position

八、在從庫啟動 slave 執行緒開始同步
START SLAVE;

在從庫 檢視同步狀態
show slave status;
show slave status\G;
這裡寫圖片描述

備註:Slave_IO_Running和Slave_SQL_Running都為yes才表示同步成功。

如需想停止同步功能,則登入MySQL狀態下,停止同步命令:

stop slave;

至此全部完成。
自己操作主從資料庫試下功能,當資料庫主從複製失敗時,可通過進入從機容器的mysql埠執行show slave status\G;命令檢視日誌資訊。