目錄
- Mysql主從同步配置
- 1、安裝兩個 mysql
- 2、編寫mysql配置文件
- 3、初始化數(shù)據(jù)
- 4、其他mysql 相關命令
Mysql主從同步配置
配置準備:
- 需要兩個數(shù)據(jù)庫
- mysql 可視化工具,當然使用用命令行也可以
- 我這里演示使用 docker 啟動兩個 mysql 容器, 你也可以安裝兩個 mysql 前提版本一致
1、安裝兩個 mysql
[root@localhost /]# mkdir -p /opt/docker/mysql1/conf/
[root@localhost /]# mkdir -p /opt/docker/mysql1/logs/
[root@localhost /]# mkdir -p /opt/docker/mysql1/data/
- 啟動第一個 mysql 掛載對應的文件目錄 port: 6894
[root@localhost /]# docker run -d -p 6894:3306 --name mysql1 \
-v /opt/docker/mysql1/conf:/etc/mysql/ \
-v /opt/docker/mysql1/logs:/logs \
-v /opt/docker/mysql1/data:/var/lib/mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=qtykGhC29eP4Smp mysql:5.7
需要注意復的 mysql /opt/docker/mysql2/data/auto.cnf 目錄下有一個 auth.cnf 需要刪除
[root@localhost docker]# cp -r /opt/docker/mysql1/ /opt/docker/mysql2/
[root@localhost docker]# rm -f /opt/docker/mysql2/data/auto.cnf
[root@localhost docker]# docker run -d -p 6895:3306 --name mysql2 \
-v /opt/docker/mysql2/conf:/etc/mysql/ \
-v /opt/docker/mysql2/logs:/logs \
-v /opt/docker/mysql2/data:/var/lib/mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=qtykGhC29eP4Smp mysql:5.7
2、編寫mysql配置文件
[root@localhost docker]# vim /opt/docker/mysql1/conf/my.cnf
[mysqld]
# 主庫配置
server-id=1 # 服務 id 唯一性
log-bin=mysql1-log # 開啟二進制日志
binlog-format=ROW # 日志記錄模式
replicate-do-db=db_docker # 要復制的數(shù)據(jù)名稱
# replicate-ignore-db=db_docker # 不需要復制的數(shù)據(jù)名稱
[root@localhost docker]# vim /opt/docker/mysql2/conf/my.cnf
[mysqld]
# 從庫配置
server-id=2 # 服務 id 唯一性
log-bin=mysql2-log # 開啟二進制日志
binlog-format=ROW # 日志記錄模式
binlog-do-db=db_docker # 要復制的數(shù)據(jù)名稱
# binlog-ignore-db=db_docker # 不需要復制的數(shù)據(jù)名稱
[root@localhost docker]# docker restart mysql1
[root@localhost docker]# docker restart mysql2
3、初始化數(shù)據(jù)
- 兩個 mysql 分別執(zhí)行以下 sql 語句創(chuàng)建數(shù)據(jù)庫創(chuàng)建表
-- 創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE `db_docker`;
USE db_docker;
-- 創(chuàng)建表
CREATE TABLE `t_docker` (
`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
`name` VARCHAR ( 255 ) DEFAULT NULL,
PRIMARY KEY ( `id` )
) ENGINE = INNODB AUTO_INCREMENT =0 DEFAULT CHARSET = utf8;
查看主庫二進制日志:
- 主庫執(zhí)行以下命令輸出二進制日志文件的狀態(tài)信息
mysql> SHOW MASTER STATUS ;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 2223 | | | |
+------------------+----------+--------------+------------------+-------------------+
配置從庫二進制日志
- 從庫更改用于連接到復制主庫、讀取主庫的二進制日志和讀取從庫的中繼日志的參數(shù)
CHANGE MASTER TO
MASTER_HOST="192.168.101.59", # 主機地址 你的主服務器 ip
Master_Port=6894, # 端口
MASTER_USER="root", # 賬號
MASTER_PASSWORD="qtykGhC29eP4Smp", # 密碼
MASTER_LOG_FILE="mysql-bin.000001", # 主庫二進制文件名 根據(jù)實際情況填寫
MASTER_LOG_POS=377; # 主庫二進制文件位置 根據(jù)實際情況填寫
從庫線程的基本參數(shù)的狀態(tài)信息。從 MySQL 8.0.22 開始,使用 SHOW REPLICA STATUS代替 SHOW SLAVE STATUS,該版本已棄用。在 MySQL 8.0.22 之前的版本中,使用SHOW SLAVE STATUS. 該語句需要REPLICATION CLIENT特權(或已棄用的 SUPER特權)。
以下兩參數(shù)為 yes 表示配置成功,否則配置有問題。 Slave_IO_Running: Yes Slave_SQL_Running: Yes
如果以上兩個參數(shù)有一個未 No 說明有錯誤,請查看這個兩個字段 Last_Errno Last_Error
錯誤內容會記錄在 Last_Error 這個字段中,根據(jù)錯誤內容修改。
mysql> SHOW SLAVE STATUS \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.101.59
Master_User: root
Master_Port: 6894
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 2223
Relay_Log_File: 98394ee2fb48-relay-bin.000004
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 2223
Relay_Log_Space: 534
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: aa58ab20-f500-11eb-aa65-0242ac110002
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
4、其他mysql 相關命令
mysql>flush tables with read lock;
- 從庫執(zhí)行,停止復制; 當從庫配置二進制日志出錯時,需要停止復制或重置,再重新配置,讓后啟動復制
mysql 注意事項
- 版本不同對應的命令和配置文件可能存在差異
- 演示使用的是 mysql 5.7
- 如果命令或配置不起作用 詳情官網(wǎng)
- 在實際應用中盡量不要使用默認端口 3306 容易被攻擊
mysql 容器:
進入容器
docker exec -it mysql2 /bin/sh
# mysql2 容器名稱 這里也可以是容器 id
登錄 mysql
mysql -u root -pqtykGhC29eP4Smp
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.7.35-log MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
my.cnf 配置解釋
[mysqld]
# 主庫配置
# 指定一個唯一的服務器 ID,可以為0但是服務器會拒絕,所以有效值 1~4294967295 之間。默認值1
# 官網(wǎng) https://dev.mysql.com/doc/refman/5.7/en/replication-options.html
server-id=1
# 開啟二進制日志,二進制文件名稱,可以是路徑 例如: /logs/mysql/log 但是需要注意給目錄文件提權,否則mysql可以無權寫入,導致報錯。
log-bin=mysql1-log
# 日志記錄模式 有三種
# STATEMENT 導致日志記錄基于語句。
# ROW 導致日志記錄基于行。這是默認設置。
# MIXED 導致日志記錄使用混合格式。介于 前兩種模式之間
# 官網(wǎng) https://dev.mysql.com/doc/refman/5.7/en/binary-log-setting.html
binlog-format=ROW
# 要復制的數(shù)據(jù)名稱,要指定多個數(shù)據(jù)庫,您必須使用此選項的多個實例。
# 由于數(shù)據(jù)庫名稱可以包含逗號,如果您提供逗號分隔列表,則該列表將被視為單個數(shù)據(jù)庫的名稱。
# 多個實例:
# replicate-do-db=db_docker1
# replicate-do-db=db_docker2
replicate-do-db=db_docker
# 不需要復制的數(shù)據(jù)名稱,配置同上
# replicate-ignore-db=db_docker # 不需要復制的數(shù)據(jù)名稱
[mysqld]
# 從庫配置同上 舉一反三
server-id=2 # 服務 id 唯一性
log-bin=mysql2-log # 開啟二進制日志
binlog-format=ROW # 日志記錄模式
binlog-do-db=db_docker # 要復制的數(shù)據(jù)名稱
# binlog-ignore-db=db_docker # 不需要復制的數(shù)據(jù)名稱
auth.cnf 文件
文件內容 server-uuid
- 這里 UUID 也是必須唯一,啟動的時候會自動生成。如果您也是通過復制 mysql data 目錄創(chuàng)建的數(shù)據(jù)庫需要刪除該文件
[auto]
server-uuid=aa58ab20-f500-11eb-aa65-0242ac110002
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
官網(wǎng)二進制日志配置:https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html
到此這篇關于Mysql主從同步配置詳情的文章就介紹到這了,更多相關Mysql主從同步配置內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- 解決MySQL主從數(shù)據(jù)庫沒有同步的兩種方法
- 一文帶你了解Mysql主從同步原理
- Docker 環(huán)境運行 Mysql 和開啟 Binlog 配置主從同步的設置方法
- MySQL 主從同步,事務回滾的實現(xiàn)原理
- MySQL數(shù)據(jù)庫主從同步實戰(zhàn)過程詳解
- MySQL主從同步中的server-id示例詳解
- MySQL數(shù)據(jù)庫的主從同步配置與讀寫分離
- MySQL主從同步原理及應用