搭建主從複製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%';
主庫配置結束