mysql 5.7主從配置


1、MySQL主從復制簡介

MySQL主從復制(也稱A/B復制、Replication),簡單講就是A和B兩台機器做主從后,在A上寫數據,另外一台B也會跟着寫數據,兩者數據實時同步。
MySQL主從是基於binlog的,主上須開啟binlog才能進行主從。
主從過程大致分為三個步驟:
1)主將更改操作記錄到binlog里;
2)從將主的binlog事件(SQL語句)同步到從本機上,並記錄在relaylog里;
3)從根據relaylog里面的SQL語句按順序執行;
主上有一個log dump線程,用來和從的I/O線程傳遞binlog
從上有兩個線程,其中I/O線程,用來同步主的binlog並生成relaylog,另外一個SQL線程用來把relaylog里面的SQL語句落地。

主從配置需要注意的點

(1)主從服務器操作系統版本和位數一致;
(2) Master和Slave數據庫的版本要一致;
(3) Master和Slave數據庫中的數據要一致;
(4) Master開啟二進制日志,Master和Slave的server_id在局域網內必須唯一;

2、准備工作

2.1 系統及軟件准備

操作系統: CentOS7.8
MySQL版本:5.7.30
Master服務器:192.168.10.243
Slave服務器:192.168.10.143

2.2、MySQL服務器操作系統配置

# 關閉主、從服務器防火牆
systemctl stop firewalld && systemctl disable firewalld

# 關閉主備服務器SELinux
# 關閉SELinux
# 查看SELinux狀態
sestatus –v
getenforce

# 臨時關閉SELinux
setenforce 0
# 永久關閉SELinux(需要重啟操作系統)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 優化文件句柄
# 打開文件的限制
vim /etc/security/limits.conf 
*     soft    nofile  65536
*     hard    nofile  131072
*     -       nproc   unlimited
*     soft    memlock unlimited
*     hard    memlock unlimited

# 優化內核參數
修改/etc/sysctl.conf文件
# 增加tcp支持的隊列數
# 減少斷開連接時 ,資源回收
net.ipv4.tcp_max_tw_buckets = 8000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 1024000

2.3、安裝 MySQL-5.7.30  

Master、Slave節點安裝MySQL

# MySQL軟件下載
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-community-client-5.7.30-1.el7.x86_64.rpm
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-community-common-5.7.30-1.el7.x86_64.rpm
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-community-devel-5.7.30-1.el7.x86_64.rpm
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-community-libs-5.7.30-1.el7.x86_64.rpm
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-community-libs-compat-5.7.30-1.el7.x86_64.rpm
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-community-server-5.7.30-1.el7.x86_64.rpm

# 安裝MySQL:
yum -y localinstall *.rpm 

或者配置yum源,直接使用yum命令安裝MySQL

vim /etc/yum.repo.d/mysql.repo
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=0

# 保存退出,執行
yum clean all
yum makecache
# 安裝 mysql-community-server
yum -y install mysql-community-server

2.4、啟動MySQL服務,並將服務加入開機啟動

systemctl enable mysqld
systemctl start mysqld
systemctl status mysqld

2.5、登錄mysql並初始化root密碼

# 登錄mysql
說明:mysql在安裝完成,啟動mysqld服務后,MySQL會自動生成一個隨機的root用戶密碼,可以到日志里面查看。
vim /var/log/mysqld.log

# 可以看到類似如下信息:
2020-03-03T06:24:40.573789Z 1 [Note] A temporary password is generated for root@localhost: p5+yU>E*q8hh

# 說明:用該臨時密碼登錄mysql后,必須要先修改密碼,如下:
[root@aliy-prod-pubser-server001 opt]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.7.26

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

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> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> set password = PASSWORD('6ps?3n2vPcXjhUfz');

# 如果從服務器是克隆的主服務器,則修改 auto.cnf(vi /var/lib/mysql/auto.cnf) 文件中 server-uuid 值
否則主從復制會報 1593 錯誤,修改完記得重啟MySQL

3、MySQL主從復制配置

3.1、master服務器配置

1)用戶添加及授權

在master 服務器授權一個賬戶,擁有slave權限

mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repl'@'192.168.10.143' IDENTIFIED BY 'GrantT^Slave143';
mysql> FLUSH PRIVILEGES;

說明: 192.168.10.143為備庫IP,GrantT^Slave143為賬號repl的密碼,配置時修改成實際環境的信息。

3.2. my.cnf配置修改

修改mysql配置文件,my.ini (windows)或 my.cnf(Linux)找到[mysqld] 標記,下方添加

server-id=1
log-bin=master-bin
binlog-format=ROW
# 以下兩個為可選選項,如果要保證數據不丟失最好在清理binlog之前把要清理的日志備份,日志文件的大小根據磁盤的性能做適當的調整
expire_logs_days = 7 // binlog過期清理時間
max_binlog_size = 1G // binlog每個日志文件大小

max_connections = 1000
character-set-server = utf8mb4 // 配置字符集
collation-server = utf8mb4_unicode_ci // 配置字符集
// 配置不同步的庫
binlog-ignore-db = mysql
binlog-ignore-db = sys
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema

3.3 重啟master 的mysql服務

systemctl restart mysqld

4、備庫配置

在另一個mysql上配置從服務器

4.1 備庫my.cnf修改

找到my.ini (windows) 或 my.cnf (linux),找到[mysqld]標記,更改如下配置

[mysqld]
max_connections = 1000
log_bin = slave-bin
server_id = 2
relay_log = slave-relay-bin
log_slave_updates = 1
read_only = 1
#以下兩個為可選選項,如果要保證數據不丟失最好在清理binlog之前把要清理的日志備份,日志文件的大小根據磁盤的性能做適當的調整
expire_logs_days = 7 //binlog過期清理時間
max_binlog_size = 100m //binlog每個日志文件大小

replicate_ignore_db=information_schema
replicate_ignore_db=performance_schema
replicate_ignore_db=mysql
replicate_ignore_db=sys

重啟mysql使配置生效

systemctl restart mysqld

5、開啟復制

5.1、查看主庫binlog信息

登陸主庫執行

mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      154 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

執行之后可以獲取目前主庫binlog使用的文件及pos點  

5.2、在從庫上設置復制信息

根據上一步獲取到的信息(Position, File)配置從庫的復制信息,在從庫上執行如下命令

CHANGE MASTER TO MASTER_HOST='192.168.10.243',MASTER_USER='repl',MASTER_PASSWORD='GrantT^Slave143',MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=154;

注意:執行從庫配置, 每次重啟mysql均需要執行(如果沒有開啟自動啟動主從)

參數解釋:

解釋:
// master的ip地址
mysql> change master to master_host='192.168.10.243',
// master授權的用戶
master_user='repl',
// master的授權用戶密碼
master_password='GrantT^Slave143',

// master的binlog日志名稱,這里使用上述命令搜索出來的為准
master_log_file='edu-mysql-bin.00000x',
// master的日志位置 這里使用上述“1.3”命令搜索出來的為准,不能帶引號,必須是整型,否則會報錯
master_log_pos=xx,
// 重試時間、單位秒,默認重試時間為 60s
master_connect_retry=30;

5.3、在從庫上開啟復制

從庫復制信息配置完成后執行命令開啟復制:
mysql> start slave;

5.4、查看復制狀態

啟動之后如果不報錯即可執行如下命令查看復制的狀態:
show slave status \G;

主要查看下面兩個參數狀態,只要都是yes,表示主從通信正常。
Slave_IO_Running=Yes
Slave_SQL_Running=Yes
如果均為yes則正常,否則需根據last_error信息進行調試

6、主從復制測試

# 創建數據庫
create database mydb;

# 創建表
use mydb;
create table mytab1(id int(10),name varchar(50),depid int(11));

# 插入數據
insert into mytab1 (id, name, depid) values (1,'mcb', 2),(2,'zhangsan',3);

查看主庫數據庫,表,數據

查看從庫數據庫,表,數據

7、主從同步可能遇到的問題

基於局域網的Master/Slave機制在通常情況下已經可以滿足“實時”備份的要求了。如果延遲比較大,可以從以下幾個因素進行排查:
(1) 網絡延遲;
(2) Master負載過高;
(3) Slave負載過高;

如果出現同步失敗,可以根據提示處理錯誤,處理完成后,需要刷新同步配置:
先停止同步
mysql> stop slave;

清理掉之前的配置,防止同步已經同步了的數據
mysql> reset slave all;

然后重新連接主庫,進行同步。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM