1. 程式人生 > 實用技巧 >Mac作業系統上使用Docker建立MySQL主從資料庫

Mac作業系統上使用Docker建立MySQL主從資料庫

拉取MySQL映象

## 下載最新版本的MySQL映象
docker pull mysql

建立兩個主從MySQL資料庫容器

第一步,需要建立一個目錄,用來存放與容器中配置檔案對應的實體地址
目錄結構如下:

master my.cnf配置檔案內容如下:

[mysqld]
server_id = 1
log-bin= mysql-bin
read-only=0
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

slave my.cnf配置檔案內容如下:

[mysqld]
server_id = 2
log-bin= mysql-bin
read-only=1
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

第二步,建立兩個主從映象,命令如下:
建立主資料庫master

docker run --name mysql-master -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=yourpassword -v /Users/young/programs/docker_mysql/master/data:/var/lib/mysql -v /Users/young/programs/docker_mysql/master/conf/my.cnf:/etc/mysql/my.cnf -v /Users/young/programs/docker_mysql/master/mysql-files:/var/lib/mysql-files mysql:latest

建立從資料庫slave

docker run --name mysql-slave -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=yourpassword -v /Users/young/programs/docker_mysql/slave/data:/var/lib/mysql -v /Users/young/programs/docker_mysql/slave/conf/my.cnf:/etc/mysql/my.cnf -v /Users/young/programs/docker_mysql/master/mysql-files:/var/lib/mysql-files mysql:latest

這裡要注意,MySQL8以後,需要在對映檔案中加入-v /Users/young/programs/docker_mysql/master/mysql-files:/var/lib/mysql-files

,否則會建立失敗。

配置主從資料庫

配置主資料庫master

//進入master容器
docker exec -it mysql-master bash

//進入mysql資料庫,密碼為前邊設定的密碼
mysql -u root -p 

//建立一個使用者來同步資料,每個slave使用標準的MySQL使用者名稱和密碼連線master。進行復制操作的使用者會授予REPLICATION SLAVE 許可權。
//出現這個原因是mysql8 之前的版本中加密規則是mysql_native_password,而在mysql8之後,加密規則是caching_sha2_password
CREATE USER 'slave'@'%' IDENTIFIED BY 'your password';(這樣有可能在slave建立與master連線時報錯)
或者
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'your password';

//對使用者進行授權(複製許可權)
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%';

//檢視狀態,記住File、Position的值,在Slave中將用到
show master status;

//查詢master容器的IP,會在slave設定主庫連線時用到
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master

配置從資料庫slave

//進入slave容器
docker exec -it mysql-slave bash

//啟動mysql命令
mysql -u root -p

//設定主庫連結  change master to 語法參考[語法參考](https://blog.csdn.net/jesseyoung/article/details/41942809)
change master to master_host='本機ip',master_user='slave',master_password='your password',master_log_file='mysql-bin.000004',master_log_pos=master's position,master_port=3306;

//啟動從庫同步
start slave;

//檢視狀態
show slave status\G;

//如果 show slave status\G命令結果中出現:
//Slave_IO_Running: Yes
//Slave_SQL_Running: Yes
//以上兩項都為Yes,那說明沒問題了。

//否則,從新配置從資料
stop slave;
reset slave all;

注意,如果在檢視slave狀態時,提示Authentication plugin 'caching_sha2_password' cannot be loaded錯誤,出現這個原因是mysql8 之前的版本中加密規則是mysql_native_password,而在mysql8之後,加密規則是caching_sha2_password,則要更改master資料庫中密碼的加密規則。所以,為了以防萬一,在master建立使用者來同步資料時,可以直接使用
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'your password';