https://www.processon.com/view/link/61e11f22f346fb06cb98c0d1
第1章 MySQL主從復制
1.主從復制功能簡單介紹
主庫通過網(wǎng)絡傳輸binlog的數(shù)據(jù)給從庫,從庫接收同步主庫數(shù)據(jù)
2.主從復制應用場景
主庫如果宕機了,從庫可以快速切換替代主庫
代碼讀寫分離,寫入操作在主庫上,讀取操作在從庫上
備份可以再從庫上操作
分析數(shù)據(jù)可以再從庫上進行
第2章 MySQL主從復制部署
1.梳理思路
第一步:從庫安裝數(shù)據(jù)庫
第二步:主庫全備數(shù)據(jù)并發(fā)送給從庫
第三步:從庫導入主庫數(shù)據(jù)
第四步:找出主庫全備時刻的位置點
第五步:主庫創(chuàng)建復制用的賬號密碼
第六步:從庫配置同步命令
第七步:從庫開啟復制功能
第八步:從庫檢查同步是否完成
2.第一步:從庫安裝數(shù)據(jù)庫
cd /opt/
scp 10.0.0.51:/opt/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz .
tar zxf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz -C /opt/
mv mysql-5.7.28-linux-glibc2.12-x86_64 mysql-5.7.28
查看解壓后目錄大小
ln -s mysql-5.7.28 mysql
配置環(huán)境變量
echo 'PATH=$PATH:/opt/mysql/bin' >> /etc/profile
source /etc/profile
mysql -V
rpm -qa|grep mariadb
yum remove mariadb-libs -y
rm -rf /etc/my.cnf
yum install -y libaio-devel
mkdir /data -p
useradd -s /sbin/nologin -M mysql
chown -R mysql.mysql /data/
chown -R mysql.mysql /opt/mysql*
初始化數(shù)據(jù)庫
mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql --datadir=/data/mysql_3306/
cat> /etc/my.cnf <<EOF
[mysqld]
port=3306
user=mysql
basedir=/opt/mysql
datadir=/data/mysql_3306
server_id=52
EOF
設置systemd啟動
cp /opt/mysql/support-files/mysql.server? /etc/init.d/mysqld
chkconfig --add mysqld
systemctl start mysqld
netstat -lntup|grep 3306
設置root賬號密碼
mysqladmin password 123
#統(tǒng)一主庫的環(huán)境
mkdir /data/binlog/ -p
chown -R mysql:mysql /data/
cat> /etc/my.cnf <<EOF
[mysqld]
port=3306
user=mysql
basedir=/opt/mysql
datadir=/data/mysql_3306
server_id=51
log_bin=/data/binlog/mysql-bin
EOF
systemctl restart mysqld
3.第二步:主庫全備數(shù)據(jù)并發(fā)送給從庫
mysqldump -uroot -p123 -A --master-data=2 --single-transaction > /tmp/full.sql
scp /tmp/full.sql 10.0.0.52:/tmp/
4.第三步:從庫導入主庫數(shù)據(jù)
mysql -uroot -p123 < /tmp/full.sql
5.第四步:找出主庫全備時刻的位置點
[root@db-51 ~]# sed -n '22p' /tmp/full.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
6.第五步:主庫創(chuàng)建復制用的賬號密碼
grant replication slave on *.* to repl@'10.0.0.%' identified by '123';
select user,host from mysql.user;
repl遠程登錄測試
查看主從數(shù)據(jù)庫數(shù)據(jù)是否一致
7.第六步:從庫配置同步命令
mysql -uroot -p123
CHANGE MASTER TO
MASTER_HOST='10.0.0.51',
MASTER_USER='repl',
MASTER_PASSWORD='123',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=154,
MASTER_CONNECT_RETRY=10;
8.第七步:從庫開啟復制功能
start slave;
9.第八步:從庫檢查同步是否完成
show slave status\G
MySQL主從復制示意圖
10.報錯總結:
故障1:IO 顯示NO
Slave_IO_Running: No
Slave_SQL_Running: Yes
報錯內容:
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
原因:
The slave I/O thread stops because master and slave have equal MySQL server ids
從庫和主庫設置了相同的server_id
故障2:SQL NO
Slave_IO_Running: Yes
Slave_SQL_Running: No
原因:
主庫上執(zhí)行的SQL語句在從庫上執(zhí)行失敗了
解決:
讓這條SQL語句在從庫上可以執(zhí)行成功
解決完之后記得重啟復制功能
stop slave;
start slave;
第3章 主從復制原理
1.主從復制涉及到的文件及線程
主庫涉及到的文件: binlog
從庫涉及到的文件: master.info db-52-relay-bin-00000x relay-log.info
?master.info
主庫涉及到的線程: Binlog Dump
從庫涉及到的線程: Slave_IO Slave_SQL
2.主從復制原理
第一步: 從庫讀取master.info里的信息連接主庫
master.info里包含了主庫的IP,端口,賬號,密碼,請求的binlog文件,post位置點
第二步: 主庫驗證從庫的連接信息Binlog Dump一直監(jiān)控著binlog文件并截取從庫需要的SQL語句
第三步: 主庫發(fā)送binlog數(shù)據(jù)
第四步: IO線程從庫接收主庫的數(shù)據(jù),并存儲到自己的relay-bin日志里
第五步: IO線程從庫存儲完之后會更新自己的master.info信息
第六步: SQL線程查看自己的relay-log.info文件,讀取自己上一次執(zhí)行過的位置
第七步: SQL線程回放relay-bin日志里SQL語句
第八步: SQL線程將最新執(zhí)行過的位置點更新到relay-log.info文件里
第4章 主從復制監(jiān)控
1.主庫狀態(tài)
mysql -uroot -p123 -e 'show processlist;'|grep 'Binlog Dump'
2.從庫狀態(tài)
查看信息:
mysql -uroot -p123 -e 'show slave status\G'
主庫連接信息、binlog位置信息:
Master_Host: 10.0.0.51
Master_User: repl
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 154
從庫中relay-log的回放信息:
Relay_Log_File: db-52-relay-bin.000006
Relay_Log_Pos: 367
Relay_Master_Log_File: mysql-bin.000003
Exec_Master_Log_Pos: 154
線程監(jiān)控信息:主要用來排查主從故障-重點監(jiān)控:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
落后于主庫的秒數(shù)-重點監(jiān)控:
Seconds_Behind_Master: 0
過濾復制相關信息:
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
延時從庫狀態(tài)信息:
SQL_Remaining_Delay: NULL
GTID復制信息:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
第5章 主從復制故障
1.IO故障
故障原因:
賬號,密碼,端口,IP寫錯
2.SQL故障
主庫和從庫數(shù)據(jù)沖突:
建議:
以主庫的數(shù)據(jù)為主,手動修復從庫沖突的數(shù)據(jù)
如果沖突的數(shù)據(jù)過多,干脆直接重做從庫
不建議:
跳過此條錯誤
stop slave;
set global sql_slave_skip_counter = 1;
start slave;
更不推薦:
直接按錯誤代碼跳過
vi /etc/my.cnf
slave-skip-errors = 1032,1062,1007