MySQL9.1.0實(shí)現(xiàn)最基礎(chǔ)主從復(fù)制的步驟
1 實(shí)驗(yàn)介紹
本次實(shí)驗(yàn) 使用 docker 鏡像,開啟三個(gè)容器,實(shí)現(xiàn)一主兩從。
容器主機(jī) | IP地址 | 映射主機(jī)端口 |
---|---|---|
mysql-master | 192.168.1.2 | 3306 |
mysql-slave1 | 192.168.1.3 | 3307 |
mysql-slave2 | 192.168.1.4 | 3308 |
2 實(shí)驗(yàn)準(zhǔn)備
2.1 創(chuàng)建目錄為MySQL掛載使用
使用 docker 做MySQL這一種有狀態(tài)的,需要很好的保持?jǐn)?shù)據(jù)的可靠性,所以得使用宿主機(jī)掛載到容器內(nèi)
[root@chucong mysql_zhucong]# tree /data/ -L 3 /data/ ├── master # master的目錄 │ ├── conf # 配置文件存放目錄 │ │ └── my.cnf # 配置文件 │ └── master-data # 存放數(shù)據(jù)的地方 ├── slave1 │ ├── conf │ │ └── my.cnf │ └── slave1-data └── slave2 ├── conf │ └── my.cnf └── slave2-data ? # MySQL 配置文件 [root@chucong mysql_zhucong]# cat /data/master/conf/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 log_bin=mysql-bin # 開啟bin-log日志,注意只有主配置文件需開啟 server_id=10 #gtid_mode=ON # 開啟GTID #enforce-gtid-consistency=ON # 保證GTID的強(qiáng)一致性 ? ? [root@chucong mysql_zhucong]# cat /data/slave1/conf/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 server_id=20 #super_read_only=on #只讀 #gtid_mode=ON # 開啟GTID #enforce-gtid-consistency=ON # 保證GTID的強(qiáng)一致性 ? [root@chucong mysql_zhucong]# cat /data/slave2/conf/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 server_id=30 #super_read_only=on #只讀 #gtid_mode=ON # 開啟GTID #enforce-gtid-consistency=ON # 保證GTID的強(qiáng)一致性
2.2 編寫 docker-compose.yml 文件
[root@chucong mysql_zhucong]# docker pull mysql:9.1.0 [root@chucong mysql_zhucong]# vim docker-compose.yml version: '2.27.1' services: mysql-master: image: mysql:9.1.0 container_name: mysql-master environment: # 定義系統(tǒng)值 MYSQL_ROOT_PASSWORD: root # root密碼 MYSQL_USER: repl # 創(chuàng)建復(fù)制用戶 MYSQL_PASSWORD: root # 設(shè)置密碼 ports: - 3306:3306 volumes: - /data/master/master-data:/var/lib/mysql # 掛載宿主機(jī)目錄到容器 - /data/master/conf/my.cnf:/etc/my.cnf restart: always networks: mynet1: ipv4_address: 192.168.1.2 ? mysql-slave1: image: mysql:9.1.0 container_name: mysql-slave1 environment: MYSQL_ROOT_PASSWORD: root MYSQL_USER: repl MYSQL_PASSWORD: root ports: - 3307:3306 volumes: - /data/slave1/slave1-data:/var/lib/mysql # 掛載宿主機(jī)目錄到容器 - /data/slave1/conf/my.cnf:/etc/my.cnf restart: always networks: mynet1: ipv4_address: 192.168.1.3 ? mysql-slave2: image: mysql:9.1.0 container_name: mysql-slave2 environment: MYSQL_ROOT_PASSWORD: root MYSQL_USER: repl MYSQL_PASSWORD: root ports: - 3308:3306 volumes: - /data/slave2/slave2-data:/var/lib/mysql # 掛載宿主機(jī)目錄到容器 - /data/slave2/conf/my.cnf:/etc/my.cnf restart: always networks: mynet1: ipv4_address: 192.168.1.4 ? networks: mynet1: # 使用自定義橋接模式 driver: bridge ipam: config: - subnet: 192.168.1.0/24 # 定義網(wǎng)段 gateway: 192.168.1.1 # 定義網(wǎng)關(guān)
2.3 啟動(dòng)容器
[root@chucong zhucong]# docker compose up -d # 查看容器是否運(yùn)行 [root@chucong zhucong]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e5776a980697 mysql:9.1.0 "docker-entrypoint.s…" 59 minutes ago Up 43 minutes 33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp mysql-slave1 0bb3a700077c mysql:9.1.0 "docker-entrypoint.s…" 59 minutes ago Up 43 minutes 33060/tcp, 0.0.0.0:3308->3306/tcp, :::3308->3306/tcp mysql-slave2 af2f63aa00e8 mysql:9.1.0 "docker-entrypoint.s…" 59 minutes ago Up 4 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql-master
3 主從復(fù)制操作
3.1 MASTER 操作指令
[root@chucong mysql_zhucong]# docker exec -it mysql-master bash bash-5.1# mysql -uroot -proot ? ? # 假如說沒有設(shè)置變量自動(dòng)創(chuàng)建可以手動(dòng)創(chuàng)建,設(shè)置了可以省略以下命令 mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'root'; ? # 賦予所有庫所有表 repl 用戶 REPLICATION SLAVE 的權(quán)限 mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; mysql> FLUSH PRIVILEGES; ? mysql> SHOW BINARY LOG STATUS\G # 與過往版本不一樣了,以前為 SHOW MASTER status\G *************************** 1. row *************************** File: mysql-bin.000034 # 注意此處的 Position: 198 # 還有此出處,這兩行在從庫操作的時(shí)候有至關(guān)重要的作用 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: d83de5a7-b723-11ef-a65b-0242c0a80104:1-2 1 row in set (0.00 sec)
3.2 SLAVE1 操作指令
[root@chucong mysql_zhucong]# docker exec -it mysql-slave1 bash bash-5.1# mysql -uroot -proot ? # 假如說沒有設(shè)置變量自動(dòng)創(chuàng)建可以手動(dòng)創(chuàng)建,設(shè)置了可以省略以下命令 mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'root'; ? # 以下這整條命令也是發(fā)生了巨大的改變,并且不需要指定端口了 mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.1.2', # MASTER 的 IP SOURCE_USER='repl', # 創(chuàng)建的用戶 SOURCE_PASSWORD='root', # 密碼 SOURCE_LOG_FILE='mysql-bin.000034', # 為主庫使用 SHOW BINARY LOG STATUS\G 中的File值 GET_SOURCE_PUBLIC_KEY=1, # 此處注意 自動(dòng)獲取主服務(wù)器的公鑰(適用于caching_sha2_password) SOURCE_LOG_POS=198; # 為主庫使用 SHOW BINARY LOG STATUS\G 中的Position值 ? # 舊版本的命令如下,可指定端口 # mysql> CHANGE MASTER TO # -> MASTER_HOST='192.168.1.2', # -> MASTER_PORT=3306, # -> MASTER_USER='repl', # -> MASTER_PASSWORD='root', # -> MASTER_LOG_FILE='mysql-bin.000034', # -> MASTER_LOG_POS=198; ? ? ? mysql> START REPLICA; # 啟動(dòng)復(fù)制 9.1.0 變化的命令 以前版本為 START SLAVE; mysql> SHOW REPLICA STATUS; # 啟動(dòng)復(fù)制 9.1.0 變化的命令 以前版本為 SHOW SLAVE STATUS; ? mysql> SHOW REPLICA STATUS\G *************************** 1. row *************************** Replica_IO_State: Waiting for source to send event Source_Host: 192.168.1.2 Source_User: repl Source_Port: 3306 Connect_Retry: 60 Source_Log_File: mysql-bin.000034 Read_Source_Log_Pos: 7061047 Relay_Log_File: e5776a980697-relay-bin.000002 Relay_Log_Pos: 7061177 Relay_Source_Log_File: mysql-bin.000034 Replica_IO_Running: Yes # IO 線程YES表示已經(jīng)連接成功,如果不是會(huì)顯示no或者connect Replica_SQL_Running: Yes
3.3 SLAVE2 操作指令
[root@chucong mysql_zhucong]# docker exec -it mysql-slave2 bash bash-5.1# mysql -uroot -proot ? # 假如說沒有設(shè)置變量自動(dòng)創(chuàng)建可以手動(dòng)創(chuàng)建,設(shè)置了可以省略以下命令 mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'root'; ? # 以下這整條命令也是發(fā)生了巨大的改變,并且不需要指定端口了 mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.1.2', # MASTER 的 IP SOURCE_USER='repl', # 創(chuàng)建的用戶 SOURCE_PASSWORD='root', # 密碼 SOURCE_LOG_FILE='mysql-bin.000034', # 為主庫使用 SHOW BINARY LOG STATUS\G 中的File值 GET_SOURCE_PUBLIC_KEY=1, # 此處注意 自動(dòng)獲取主服務(wù)器的公鑰(適用于caching_sha2_password) SOURCE_LOG_POS=198; # 為主庫使用 SHOW BINARY LOG STATUS\G 中的Position值 ? # 舊版本的命令如下,可指定端口 # mysql> CHANGE MASTER TO # -> MASTER_HOST='192.168.1.2', # -> MASTER_PORT=3306, # -> MASTER_USER='repl', # -> MASTER_PASSWORD='root', # -> MASTER_LOG_FILE='mysql-bin.000034', # -> MASTER_LOG_POS=198; ? mysql> START REPLICA; # 啟動(dòng)復(fù)制 9.1.0 變化的命令 以前版本為 START SLAVE; mysql> SHOW REPLICA STATUS; # 啟動(dòng)復(fù)制 9.1.0 變化的命令 以前版本為 SHOW SLAVE STATUS; ? mysql> SHOW REPLICA STATUS\G *************************** 1. row *************************** Replica_IO_State: Waiting for source to send event Source_Host: 192.168.1.2 Source_User: repl Source_Port: 3306 Connect_Retry: 60 Source_Log_File: mysql-bin.000034 Read_Source_Log_Pos: 7061047 Relay_Log_File: 0bb3a700077c-relay-bin.000002 Relay_Log_Pos: 7061177 Relay_Source_Log_File: mysql-bin.000034 Replica_IO_Running: Yes Replica_SQL_Running: Yes
4 驗(yàn)證是否實(shí)現(xiàn)主從
4.1 導(dǎo)入sql腳本查看是否正常主從復(fù)制
# MASTER [root@chucong ~]# docker cp smart_work_v3.sql mysql-master:/ Successfully copied 6.53MB to mysql-master:/ [root@chucong ~]# docker exec -it mysql-master bash bash-5.1# ls afs boot docker-entrypoint-initdb.d home lib64 mnt proc run smart_work_v3.sql sys usr bin dev etc lib media opt root sbin srv tmp var ? bash-5.1# mysql -uroot -proot mysql> CREATE DATABASE shuyan; # 創(chuàng)建數(shù)據(jù)庫 mysql> USE shuyan # 切換到數(shù)據(jù)庫 Database changed ? mysql> SOURCE smart_work_v3.sql # 導(dǎo)入sql腳本 ? mysql> SHOW TABLES; +----------------------------------------+ | Tables_in_shuyan | +----------------------------------------+ | aaa | | abi_http_log | | act_app_appdef | | act_app_databasechangelog | | act_app_databasechangeloglock | | act_app_deployment | | act_app_deployment_resource | | act_cmmn_casedef | +----------------------------------------+
4.2 檢驗(yàn)從庫是否看見復(fù)制是否成功
mysql> USE shuyan; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A ? Database changed mysql> SHOW TABLES; +----------------------------------------+ | Tables_in_shuyan | +----------------------------------------+ | aaa | | abi_http_log | | act_app_appdef | | act_app_databasechangelog | | act_app_databasechangeloglock | | act_app_deployment | | act_app_deployment_resource | | act_cmmn_casedef | | act_cmmn_databasechangelog | | act_cmmn_databasechangeloglock | | act_cmmn_deployment | +----------------------------------------+
到此這篇關(guān)于MySQL9.1.0實(shí)現(xiàn)最基礎(chǔ)主從復(fù)制的步驟的文章就介紹到這了,更多相關(guān)MySQL9.1.0 主從復(fù)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
CentOS下將MySQL 5.1升級(jí)到MySQL 5.5的步驟
這篇文章主要介紹了CentOS下將MySQL 5.1升級(jí)到MySQL 5.5的步驟,需要的朋友可以參考下2015-08-08Qt如何編譯MySQL數(shù)據(jù)庫驅(qū)動(dòng)
這篇文章主要介紹了Qt如何編譯MySQL數(shù)據(jù)庫驅(qū)動(dòng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-12-12mysql中insert與select的嵌套使用解決組合字段插入問題
本節(jié)主要介紹了mysql中insert與select的嵌套使用解決組合字段插入問題,需要的朋友可以參考下2014-07-073種高效的Tags標(biāo)簽系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)方案分享
這篇文章主要介紹了3種高效的Tags標(biāo)簽系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)方案分享,現(xiàn)在主流的博客、CMS系統(tǒng)都有一個(gè)標(biāo)簽系統(tǒng),本文就探討它的數(shù)據(jù)庫設(shè)計(jì)方式,需要的朋友可以參考下2014-07-07MySQL安裝與配置:手工配置MySQL(windows環(huán)境)過程
這篇文章主要介紹了MySQL安裝與配置:手工配置MySQL(windows環(huán)境)過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12MySQL億級(jí)數(shù)據(jù)平滑遷移雙寫方案實(shí)戰(zhàn)
預(yù)約業(yè)務(wù)與其他業(yè)務(wù)數(shù)據(jù)表存儲(chǔ)在同一個(gè)數(shù)據(jù)庫,當(dāng)其他業(yè)務(wù)出現(xiàn)慢SQL等異常時(shí),會(huì)影響到預(yù)約業(yè)務(wù),為了提高系統(tǒng)穩(wěn)定性和數(shù)據(jù)隔離性,需要將預(yù)約數(shù)據(jù)表從原來的數(shù)據(jù)庫中遷移出來,單獨(dú)建立數(shù)據(jù)庫,涉及到的讀寫場(chǎng)景多,改造成本大,采用 Mybatis插件實(shí)現(xiàn)遷移所需的雙寫等功能2024-08-08