国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

MySQL Master Slave Docker部署例子

bladefury / 1586人閱讀

摘要:原文地址本文對應代碼用部署基于的例子。此外,將設置為模式這樣就不能在上執行寫操作了。最后正式啟動驗證到上看看是否存在如果有就說明從復制到了上。版本在上也提供了,操作過程和上述一致,只不過容器名字會有變化。

原文地址:https://chanjarster.github.io...

本文對應代碼:github

用Docker部署基于GTID的MySQL Master-Slave Replication例子。

啟動Master

寫一個文件mysql-master.cnf

[mysqld]
server_id=1
binlog_format=ROW
gtid_mode=ON
enforce-gtid-consistency=true

這個配置文件把Master的server_id設置為1,要注意在同一個Master-Slave集群里,server_id不能重復。

啟動Master:

docker run -d --name mysql-master 
  -e MYSQL_USER=my_user 
  -e MYSQL_DATABASE=my_database 
  -e MYSQL_PASSWORD=my_database_password 
  -e MYSQL_ROOT_PASSWORD=my_root_password 
  -p 3307:3306 
  -v $(pwd)/mysql-master.cnf:/etc/mysql/conf.d/mysql-master.cnf 
  mysql:8.0 
  --log-bin=my
啟動Slave

寫一個文件mysql-slave-1.cnf

[mysqld]
server_id=2
binlog_format=ROW
gtid_mode=ON
enforce-gtid-consistency=true
read_only=ON

這個文件把Slave的server_id設置為2,如果你有多個Slave,那么得分別設置不同的server_id。此外,將Slave設置為read_only模式(這樣就不能在slave上執行寫操作了)。

啟動Slave:

docker run -d --name mysql-slave-1 
  -e MYSQL_ROOT_PASSWORD=my_root_password 
  -p 3308:3306 
  -v $(pwd)/mysql-slave-1.cnf:/etc/mysql/conf.d/mysql-slave-1.cnf 
  mysql:8.0 
  --skip-log-bin 
  --skip-log-slave-updates 
  --skip-slave-start
創建Replication用戶

到Master上創建Replication用戶:

$ docker exec -it mysql-master mysql -u root -p
Enter password: my_root_password

mysql> CREATE USER "repl"@"%" IDENTIFIED BY "password";
mysql> GRANT REPLICATION SLAVE ON *.* TO "repl"@"%";
將Slave和Master關聯

到Slave上把自己和Master關聯起來:

$ docker exec -it mysql-slave-1 mysql -u root -p
Enter password: my_root_password

mysql> CHANGE MASTER TO 
  MASTER_HOST="192.168.101.21",
  MASTER_PORT=3307,
  MASTER_USER="repl",
  MASTER_PASSWORD="password",
  GET_MASTER_PUBLIC_KEY=1,
  MASTER_AUTO_POSITION=1;

注意MASTER_HOST寫的是Master所在的Host的IP,MASTER_PORT寫的是Master暴露在Host上的端口,MASTER_USERMASTER_PASSWORD則是Replication用戶的信息。

最后正式啟動Slave:

mysql> START SLAVE;
驗證

到Slave上看看my_database是否存在:

$ docker exec -it mysql-slave-1 mysql -u root -p
Enter password: my_root_password

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| my_database        |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

如果有就說明my_database從Master復制到了Slave上。

docker-compose版本

在github上也提供了docker-compose.yaml,操作過程和上述一致,只不過容器名字會有變化。

# 拉起Master和Slave
$ docker-compose -p mysql-repl up
# 連接Master
$ docker exec -it mysql-repl_mysql-master_1 mysql -u root -p
# 連接Slave
$ docker exec -it mysql-repl_mysql-slave_1 mysql -u root -p

并且CHANGE MASTER TO語句有所不同,使用的是Master的Service Name以及容器內端口3306

CHANGE MASTER TO 
  MASTER_HOST="mysql-master",
  MASTER_PORT=3306,
  MASTER_USER="repl",
  MASTER_PASSWORD="password",
  GET_MASTER_PUBLIC_KEY=1,
  MASTER_AUTO_POSITION=1;
Troubleshooting docker run版本在Mac上無法工作

這個是因為Slave容器無法訪問到Master的host。解決辦法我也不知道。

關于GET_MASTER_PUBLIC_KEY

在做本例子時出現過Slave無法連接到Master的情況:

2019-06-19T01:34:24.361566Z 8 [System] [MY-010597] [Repl] "CHANGE MASTER TO FOR CHANNEL "" executed". Previous state master_host="", master_port= 3306, master_log_file="", master_log_pos= 4, master_bind="". New state master_host="mysql-master", master_port= 3306, master_log_file="", master_log_pos= 4, master_bind="".
2019-06-19T01:34:28.274728Z 9 [Warning] [MY-010897] [Repl] Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the "START SLAVE Syntax" in the MySQL Manual for more information.
2019-06-19T01:34:28.330825Z 9 [ERROR] [MY-010584] [Repl] Slave I/O for channel "": error connecting to master "repl@mysql-master:3306" - retry-time: 60  retries: 1, Error_code: MY-002061
2019-06-19T01:35:28.333735Z 9 [ERROR] [MY-010584] [Repl] Slave I/O for channel "": error connecting to master "repl@mysql-master:3306" - retry-time: 60  retries: 2, Error_code: MY-002061
2019-06-19T01:36:28.335525Z 9 [ERROR] [MY-010584] [Repl] Slave I/O for channel "": error connecting to master "repl@mysql-master:3306" - retry-time: 60  retries: 3, Error_code: MY-002061
...

詳細細節可見這個issue,這是因為MySQL 8默認啟用了caching_sha2_password authentication plugin,issue中提到了一個辦法:在啟動Slave的時候添加--default-auth=mysql_native_password參數。不過我感覺這個不太好,查閱相關文檔后發現可以在CHANGE MASTER TO添加GET_MASTER_PUBLIC_KEY=1參數來解決這個問題。

更多詳情參考caching_sha2_password and Replication和CHANGE MASTER TO Syntax。

參考資料

Setting Up Replication Using GTIDs

Binary Logging Options and Variables

Replication Slave Options and Variables

DNS Lookup Optimization and the Host Cache

CHANGE MASTER TO Syntax

caching_sha2_password and Replication

Bitnami MySQL Docker, Bitnami制作的MySQL鏡像,支持通過環境變量來配置Master-Slave Replication,不過它不支持GTID,只支持基于Binary Log的Replication。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27909.html

相關文章

  • MySQL 復制 - 性能與擴展性的基石 2:部署及其配置

    摘要:配置主庫和備庫。主庫當前的二進制日志文件,和獲得數據快照時在該二進制日志文件中的偏移量。它能夠在備份時不阻塞服務器的操作,因此可以在不影響主庫的情況下設置備庫。 showImg(https://segmentfault.com/img/bVbqOEk?w=720&h=480); 正所謂理論造航母,現實小帆船。單有理論,不動手實踐,學到的知識猶如空中樓閣。接下來,我們一起來看下如何一步步...

    劉德剛 評論0 收藏0
  • MySQL 復制 - 性能與擴展性的基石 2:部署及其配置

    摘要:配置主庫和備庫。主庫當前的二進制日志文件,和獲得數據快照時在該二進制日志文件中的偏移量。它能夠在備份時不阻塞服務器的操作,因此可以在不影響主庫的情況下設置備庫。 showImg(https://segmentfault.com/img/bVbqOEk?w=720&h=480); 正所謂理論造航母,現實小帆船。單有理論,不動手實踐,學到的知識猶如空中樓閣。接下來,我們一起來看下如何一步步...

    fobnn 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<