1. 程式人生 > 實用技巧 >搭建主從複製mysql(docker中)

搭建主從複製mysql(docker中)

1、搭建主庫

#建立目錄
mkdir /data/mysql/master01
如果不存在:mkdir /data/mysql/master01 -p
#進入master01目錄
cd /data/mysql/master01

#建立conf和data資料夾 用來存放配置和資料
mkdir conf data

#給資料夾授權
chmod 777 * -R

#建立配置檔案
cd /data/mysql/master01/conf
vim my.cnf

#輸入如下內容
[mysqld]
#開啟二進位制日誌

log-bin=mysql-bin
#服務id,不可重複
server-id=1
#建立並執行容器
docker run --name=mysql-master01 -v /data/mysql/master01/data:/var/lib/mysql -v /data/mysql/master01/conf:/etc/my.cnf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
#建立同步賬戶以及授權 賬戶wlwpass 密碼wlwpass

 create user 'wlwpass'@'%' identified by 'wlwpass';






flush privileges;


解決錯誤:

修改my.conf檔案

vim /data/mysql/master01/conf/my.conf

檔案後新增:

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO ,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

#重啟mysql服務並列印日誌

docker restart mysql-master01 && docker logs -f mysql-master01

再重新flush privileges;

但是我還是報錯,於是:

show variables like '%sql_mode%';
set sql_mode=(select replace(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

show master status;

發現File和Position為空值

發現日誌沒開啟

vim /data/mysql/master01/conf/my.conf

log-bin配置項表示binlog的base name,產生的日誌檔名稱類似,mysql-bin.00001,mysql-bin.00002,mysql-bin.00003。

重啟mysql

如果使用了GTID(global transaction ID),Executed_Gtid_Set表示已經在這個master上執行的GTID集合,與這個server上的系統變數gtid_executed 含義相同。

如果該server是slave,則執行show slave status中是輸出的對應列Executed_Gtid_Set,含義也相同。


以上還是解決不了打開不了日誌,用下面方法

docker exec mysql-master01 bash -c "echo 'log-bin=/var/lib/mysql/mysql-bin' >> /etc/mysql/mysql.conf.d/mysqld.cnf"
docker exec mysql-master01 bash -c "echo 'server-id=1' >> /etc/mysql/mysql.conf.d/mysqld.cnf"

成功!!!!!!!

#檢視二進位制日誌相關的配置項 show global variables like 'binlog%';

#檢視server相關的配置項 show global variables like 'server%';

主庫配置結束