mysql主從配置
由於機器限制,在兩臺機器上搞主從似乎有點奢望,於是改用docker玩玩MySQL的主從配置。
前提
假設已經安裝好docker了,另外,本測試基於centos系統。
安裝mysql
docker pull mysql:5.7
設置主庫
-p | 容器對外端口:容器內部端口 |
---|---|
--name |
容器名稱 ,docker rename 源名稱 新名稱 進行改名 |
-e | 傳遞環境變量、設置密碼 |
docker run -p 9990:3306 --name myqlMaster -e MYSQL_ROOT_PASSWORD=123@456 -d mysql:5.7
設置從庫
docker run -p 9991:3306 --name mysqlSlave -e MYSQL_ROOT_PASSWORD=123@456 -d mysql:5.7
查看docker容器
-a | 帶上參數a,顯示所有容器,默認顯示運行中的容器 |
---|
docker ps
或
docker ps -a
進入主庫和從庫的容器內
-it | 後邊是容器的id 號 |
---|---|
/bin/bash | 啓動容器後啓動bash |
docker exec -it df247720c8d6 /bin/bash
docker exec -it df247720c8d6 /bin/bash
設置主庫的my.cnf文件
插曲
一般用vi、vim編輯文件,在這個容器內需要安裝一下:
apt-get update
apt-get install vim
server-Id | 注意起名的Id不能和其他庫重複了 |
---|---|
log-bin | 給日誌文件起個名字,從庫從該文件進行備份 |
重啓mysql
重啓mysql服務後,容器停止並退出,docker start 容器名稱,重新開啓即可,然後運行上述exec命令,重新進入
service mysql restart
docker start mysqlMaster
創建用於主從同步的賬號
備註
在主庫中,創建用於同步數據的賬號,授予賬號REPLICATION CLIENT權限,這樣我們可以使用 show master status
, show slave status
和 show binary logs
來確定複製狀態。
授予複製賬號REPLICATION SLAVE權限,複製才能真正地工作。
CREATE USER 'test'@'%' IDENTIFIED BY '123@456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test'@'%';
配置從庫
同理,配置從庫的my.cnf文件,然後也是重啓
relay-log | 將主服務器的二進制日誌讀取過來,並記錄到從服務器本地relay-log文件 |
---|
關聯主庫和叢庫
登錄數據庫後,查看主庫狀態
show master status;
查看主庫和從庫IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysqlMaster
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysqlSlave
進入叢庫中進行關聯
master_host | 主庫的的ip |
---|---|
master_user | 用於主從複製的賬號 |
master_host | 主庫的的ip |
master_log_filer | 即剛剛的主庫的File字段,表明叢庫從哪個日誌文件同步日誌 |
master_log_pos | 即剛剛的主庫的Position字段,表明叢庫從日誌文件的哪個位置開始讀 |
master_connect_retry | 連接失敗,重試時間,單位秒,默認60 |
change master to master_host='172.17.0.2', master_user='test', master_password='123@456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos= 336, master_connect_retry=60;
成功
測試
用Navicat連接,如果在服務器上搭建,本地連接時記得ping一下和Telnet一下,可能由於防火牆設置導致無法連接。分別連接主庫和叢庫,然後在主庫新建庫和表,刷新叢庫,即可得到對應庫表。
補充
安全退出容器而不會終止容器
Ctrl+P+Q