本文將基於Docker
部署2臺MySQL服務實現主從同步,即主master
用於寫
(增刪改),從slave
用來讀
(查)mysql
master
(主)配置
mkdir -p /IT_zhengqing/soft/mysql/mysql-master mkdir -p /IT_zhengqing/soft/mysql/mysql-master/conf.d mkdir -p /IT_zhengqing/soft/mysql/mysql-master/data
my.cnf
配置文件cd /IT_zhengqing/soft/mysql/mysql-master # echo:若是沒有這個文件則建立。若是有這個文件,那麼新內容將會代替原來的內容 echo '[mysqld] user=mysql # MySQL啓動用戶 default-storage-engine=INNODB # 建立新表時將使用的默認存儲引擎 character-set-server=utf8 # 設置mysql服務端默認字符集 pid-file = /var/run/mysqld/mysqld.pid # pid文件所在目錄 socket = /var/run/mysqld/mysqld.sock # 用於本地鏈接的socket套接字 datadir = /var/lib/mysql # 數據文件存放的目錄 #log-error = /var/log/mysql/error.log #bind-address = 127.0.0.1 # MySQL綁定IP expire_logs_days=7 # 定義清除過時日誌的時間(這裏設置爲7天) sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 定義mysql應該支持的sql語法,數據校驗等! # 容許最大鏈接數 max_connections=200 # ================= ↓↓↓ mysql主從同步配置start ↓↓↓ ================= # 同一局域網內注意要惟一 server-id=3310 # 開啓二進制日誌功能 log-bin=mysql-bin # ================= ↑↑↑ mysql主從同步配置end ↑↑↑ ================= [client] default-character-set=utf8 # 設置mysql客戶端默認字符集 ' > my.cnf
docker pull mysql:5.7
舒適小提示:注意開放對應端口以備訪問哦~
--name
:容器命名爲mysql_server_3310-p
:將容器的3306端口映射到宿主機的3310端口-d
: 後臺運行--restart=always
: docker重啓後,容器也隨之啓動-v
:目錄掛載-e MYSQL_ROOT_PASSWORD
:初始化root帳號的密碼爲rootdocker run --name mysql_server_3310 -d -p 3310:3306 --restart=always -v /IT_zhengqing/soft/mysql/mysql-master/data/:/var/lib/mysql -v /IT_zhengqing/soft/mysql/mysql-master/conf.d:/etc/mysql/conf.d -v /IT_zhengqing/soft/mysql/mysql-master/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root mysql:5.7
docker exec -it mysql_server_3310 /bin/bash
slave
,並受權-- 登陸mysql mysql -uroot -proot -- 建立用戶slave,密碼123456 CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; -- 授予slave用戶 `REPLICATION SLAVE`權限和`REPLICATION CLIENT`權限,用於在`主` `從` 數據庫之間同步數據 GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; -- 授予全部權限則執行命令: GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%'; -- 使操做生效 FLUSH PRIVILEGES;
slave
(從)配置
舒適小提示:這裏slave配置與master配置區別在於:容器掛載目錄
、容器名
、端口
、以及my.cnf
配置文件中的server-id
log-bin
relay_log
# 1. 建立所需文件夾,用於映射容器相應文件路徑 mkdir -p /IT_zhengqing/soft/mysql/mysql-slave mkdir -p /IT_zhengqing/soft/mysql/mysql-slave/conf.d mkdir -p /IT_zhengqing/soft/mysql/mysql-slave/data # 2. 建立`my.cnf`配置文件 cd /IT_zhengqing/soft/mysql/mysql-slave # echo:若是沒有這個文件則建立。若是有這個文件,那麼新內容將會代替原來的內容 echo '[mysqld] user=mysql # MySQL啓動用戶 default-storage-engine=INNODB # 建立新表時將使用的默認存儲引擎 character-set-server=utf8 # 設置mysql服務端默認字符集 pid-file = /var/run/mysqld/mysqld.pid # pid文件所在目錄 socket = /var/run/mysqld/mysqld.sock # 用於本地鏈接的socket套接字 datadir = /var/lib/mysql # 數據文件存放的目錄 #log-error = /var/log/mysql/error.log #bind-address = 127.0.0.1 # MySQL綁定IP expire_logs_days=7 # 定義清除過時日誌的時間(這裏設置爲7天) sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 定義mysql應該支持的sql語法,數據校驗等! # 容許最大鏈接數 max_connections=200 # ================= ↓↓↓ mysql主從同步配置start ↓↓↓ ================= # 同一局域網內注意要惟一 server-id=3311 # 開啓二進制日誌功能,以備slave做爲其它slave的master時使用 log-bin=mysql-slave-bin # relay_log配置中記日誌 relay_log=edu-mysql-relay-bin # ================= ↑↑↑ mysql主從同步配置end ↑↑↑ ================= [client] default-character-set=utf8 # 設置mysql客戶端默認字符集 ' > my.cnf # 3. 運行鏡像 docker run --name mysql_server_3311 -d -p 3311:3306 --restart=always -v /IT_zhengqing/soft/mysql/mysql-slave/data/:/var/lib/mysql -v /IT_zhengqing/soft/mysql/mysql-slave/conf.d:/etc/mysql/conf.d -v /IT_zhengqing/soft/mysql/mysql-slave/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root mysql:5.7
master
和slave
master
服務器中進入mysql查看master狀態-- 進入mysql mysql -uroot -proot -- 查看狀態 show master status;
注:File
和Position
字段的值slave
中將會用到,在slave操做完成以前不要操做master
,不然將會引發狀態變化,即File和Position字段的值變化 !!!sql
slave
服務器中進入mysql,啓動主從同步master_host
:master服務器地址master_port
:端口號master_user
:用於數據同步的用戶(以前在master中建立受權的用戶)master_password
:用於同步用戶的密碼master_log_file
:指定slave從哪一個日誌文件開始複製數據,即以前提到的File
字段值master_log_pos
:從哪一個Position開始讀,即以前master
中的Position
字段值,0則是從頭開始完整的拷貝master庫master_connect_retry
:鏈接失敗時重試的時間間隔,默認是60秒mysql -uroot -proot change master to master_host='www.zhengqingya.com',master_port=3310, master_user='slave', master_password='123456', master_log_file='mysql-bin.000003', master_log_pos= 746, master_connect_retry=30; # 開啓主從同步過程 【中止命令:stop slave;】 start slave;
show slave status \G;
以下Slave_IO_Running
和Slave_SQL_Running
都是Yes的話,就說明主從同步已經配置好了!
若是Slave_IO_Running
爲Connecting
,SlaveSQLRunning
爲Yes
,則說明配置有問題,這時候就要檢查配置中哪一步出現問題了哦,可根據Last_IO_Error
字段信息排錯或谷歌......docker
在Navicat
中分別鏈接master
和slave
服務器
而後在master
中建庫建表插入數據,最後在slave
中刷新可發現master
中的數據同步成功過來了~
shell