該文檔的MySQL數據庫基於Docker設置兩個實例,MySQL-Master和MySQL-Slave兩個。
在使用Navicat for MySQL遠程連接實例時,無法連接成功,需要進行如下設置:
命令:docker exec -it mysql-master bash
登錄MySQL:root@1a435d89b15f:/# mysql -uroot -proot123
進行如下設置:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root123';
即可進行登錄。
主數據庫配置:
docker exec -it 627a2368c865[容器的id] /bin/bash或
docker exec -it mysql-master[容器的名稱] /bin/bash命令進入到Master容器內部。
cd /etc/mysql切換到/etc/mysql目錄下
vi my.cnf 對my.cnf進行編輯
報出bash: vi: command not found,
需要在docker容器內部自行安裝vim
先使用apt-get update命令
再使用apt-get install vim命令安裝vim
在my.cnf中新增:
[mysqld]
## 同一局域網內注意要唯一
server-id=100
## 開啓二進制日誌功能,可以隨便取(關鍵)
log-bin=mysql-bin
完成後,使用service mysql restart完成重啓使生效。
重啓mysql服務時會使得docker容器停止,需啓動容器:docker start mysql-master
在Master數據庫創建數據同步用戶,授予用戶 slave REPLICATION SLAVE權限和REPLICATION CLIENT權限,用於在主從庫之間同步數據
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
從數據庫配置:
操作同上,進入容器內部,修改my.cnf文件,文件修改如下:
鏈接Master(主)和Slave(從):
在Master進入mysql,執行show master status;
File和Position字段的值後面將會用到,在後面的操作完成之前,需要保證Master庫不能做任何操作,否則將會引起狀態變化,File和Position字段的值變化。
進入Slave 中mysql,執行如下命令:
change master to master_host='172.17.0.2', master_user='slave', master_password='root123',
master_port=3306, master_log_file='binlog.000003', master_log_pos= 437,
master_connect_retry=30;
命令說明:
1、master_host:Master的地址,指的是容器的獨立ip;可通過如下命令獲取
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-slave
2、master_port:Master的端口號,指的是容器的端口號(內部的端口,不是外部的)
3、master_user:用於數據同步的用戶
4、master_password:用於同步的用戶的密碼
5、master_log_file:指定 Slave 從哪個日誌文件開始複製數據,上文中的 File 字段的值
6、master_log_pos:從哪個 Position 開始讀,即上文中提到的 Position 字段的值
7、master_connect_retry:如果連接失敗,重試的時間間隔,單位是秒,默認是60秒
show slave status \G;--用於查看主從同步狀
一般SlaveIORunning、 SlaveSQLRunning 都是No,使用start slave開啓主從複製過程,若都爲yes表明複製開始
若使用start slave開啓主從複製過程後,如果SlaveIORunning:Connecting,連接出現問題,可進行修改,之後執行如下命令:
stop slave;
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=155, master_connect_retry=30;
start slave;
可以在slave的mysql中測試同步賬號連接master數據庫
root@9d8270cf51b4:/# mysql -uslave -h172.17.0.2 -p -P3306
可連接則證明賬號密碼無誤
在start slave 時提示Relay log 導致複製啓動失敗,可進行如下解決:
reset slave;
start slave;