最近在實踐docker時,遇到了一個問題,就是如何開啟兩個MySQL容器。在研究了一番之后,我總結(jié)出了如下步驟:
1. 創(chuàng)建第一個MySQL容器
docker run --name mysql-1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
2. 創(chuàng)建第二個MySQL容器
docker run --name mysql-2 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
注意:兩個MySQL容器的名稱不能相同,端口號需要分別指定,這里我分別指定了3306和3307。
3. 進(jìn)入第一個MySQL容器并修改配置
docker exec -it mysql-1 bash # 進(jìn)入容器的mysql配置目錄 cd /etc/mysql/conf.d # 修改MySQL配置文件 vim mysqld.cnf # 添加如下內(nèi)容 [mysqld] server-id = 1 log-bin = mysql-bin binlog-do-db = test1
保存配置文件并退出容器。
4. 進(jìn)入第二個MySQL容器并修改配置
docker exec -it mysql-2 bash # 進(jìn)入容器的mysql配置目錄 cd /etc/mysql/conf.d # 修改MySQL配置文件 vim mysqld.cnf # 添加如下內(nèi)容 [mysqld] server-id = 2 log-bin = mysql-bin binlog-do-db = test2
保存配置文件并退出容器。
5. 對第一個MySQL容器進(jìn)行replication配置
# 進(jìn)入第一個MySQL容器的MySQL命令行 docker exec -it mysql-1 mysql -uroot -p123456 # 創(chuàng)建replication用的用戶 CREATE USER 'replication'@'%' IDENTIFIED BY '123456'; # 賦予replication用戶權(quán)限 GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%'; # 查看當(dāng)前數(shù)據(jù)庫狀態(tài) SHOW MASTER STATUS;
記下當(dāng)前數(shù)據(jù)庫狀態(tài)的輸出,包括File和Position兩個值。
6. 對第二個MySQL容器進(jìn)行replication配置
# 進(jìn)入第二個MySQL容器的MySQL命令行 docker exec -it mysql-2 mysql -uroot -p123456 # 備份MySQL配置文件 mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak # 生成新的MySQL配置文件 vim /etc/mysql/my.cnf # 添加如下內(nèi)容 [mysqld] server-id = 2 log-bin = mysql-bin binlog-do-db = test2 replicate-do-db = test1 relay-log = mysql-relay-bin relay-log-index = mysql-relay-bin.index relay-log-info-file = mysql-relay-bin.info log-slave-updates # 重啟容器 docker restart mysql-2 # 進(jìn)行replication配置 CHANGE MASTER TO MASTER_HOST='localhost', MASTER_PORT=3306, MASTER_USER='replication', MASTER_PASSWORD='123456', MASTER_LOG_FILE='File值', MASTER_LOG_POS=Position值; # 啟動slave START SLAVE;
7. 完成配置
到此為止,兩個MySQL容器的數(shù)據(jù)就可以同步了,分別可以通過3306和3307端口訪問。如果想要進(jìn)行數(shù)據(jù)的操作和管理,可以通過docker exec進(jìn)入容器內(nèi)部進(jìn)行。