起步
藉助 Docker 容器部署 MySQL 主從數據庫。以下內容涉及路徑、端口等可更換內容會額外加以說明。
如果你還沒用過 Docker,不妨先看看 Centos7 上安裝 MySQL。
操作步驟
- 創建主從數據庫的映射目錄。
# 創建主(master)據庫的數據(data)目錄,配置(conf)目錄
$ mkdir /Users/guan/Mine/docker_file/netdiskData/Master/data \
/Users/guan/Mine/docker_file/netdiskData/Master/conf -p
# 創建從(slave)據庫的數據(data)目錄,配置(conf)目錄
$ mkdir /Users/guan/Mine/docker_file/netdiskData/Slave/data \
/Users/guan/Mine/docker_file/netdiskData/Slave/conf -p
- 以上路徑可以自行按需更換。但目錄結構按如下方式管理較爲合理:
|- netdiskData(項目的數據目錄)
|- Master(主數據庫根目錄)
|- data(數據存放目錄)
|- conf(配置文件存放目錄)
|- Slave (從數據庫根目錄)
|- data
|- conf
- 啓動主從數據庫。
$ docker run --name master \
-p 3306:3306 \
-v /.../netdiskData/Master/data:/var/lib/mysql \
-v /.../netdiskData/Master/conf:/etc/mysql/conf.d \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
-itd daocloud.io/library/mysql:5.7
$ docker run --name slave \
-p 3307:3306 \
-v /.../netdiskData/Slave/data:/var/lib/mysql \
-v /.../netdiskData/Slave/conf:/etc/mysql/conf.d \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
-itd daocloud.io/library/mysql:5.7
- 類似
-v /.../netdiskData/Master/data:/var/lib/mysql
語句中,:
前表示宿主機(本機)路徑,請自行按需更改;:
後表示 docker 容器中的路徑,不必更改。 -p 3306:3306
,前者表示宿主機端口,後者表示容器內端口。後者不應修改。-e MYSQL_ROOT_PASSWORD=123456
設置 root 密碼。如有需求,請自行修改。
- 添加數據庫配置文件。
$ vim netdiskData/Master/conf/1.cnf
# 寫入內容如下
[mysqld]
log-bin=mysql-bin
server-id=1
$ vim netdiskData/Slave/conf/1.cnf
# 寫入內容如下
[mysqld]
log-bin=mysql-bin
server-id=2
- 注意,主從配置文件中,server-id 值一定不能一樣。
- 重啓主從 docker 容器,進入 master 容器查看 file id。
重啓 docker 之後,進入 master 數據庫容器,並登陸主數據庫(mysql -uroot -p
)。
mysql> show master status;
我們記錄這裏的 file id: mysql-bin.000002。
- 進入 slave 容器配置從數據庫。
登陸從數據庫。
mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.102', MASTER_USER='root', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=0;
- MASTER_HOST 表示 master 數據庫的 IP 地址,如果你跟我一樣藉助了 docker ,那麼千萬不要寫 127.0.0.1 或者 0.0.0.0,應該填寫物理機的真實 IP(
ifconfig
或者ip addr
查看)。 - MASTER_USER 是 master 數據庫用戶名,MASTER_PASSWORD 是 master 數據庫用戶密碼,請根據實際情況自行修改。
- MASTER_LOG_FILE 填寫之前查看的 file id。
- MASTER_LOG_POS=0 表示從最開始的位置進行同步。
- 啓動 slave,查看 slave 狀態。
mysql> start slave;
mysql> show slave status\G
看到 Slave_IO_Running 與 Slave_SQL_Running 都是 yes 之後就成功了。
感謝
- 參考 https://coding.imooc.com/class/323.html
- 參考 https://www.jianshu.com/p/ed5b501267d3