1. 程式人生 > >MySql主從搭建詳細步驟

MySql主從搭建詳細步驟

成功 p s linux6 ransac amp defaults 查看 遇到 tab

環境:

linux64位,一臺機器兩個實例,主庫3306端口,從庫3307端口

步驟:

一、下載安裝

先下載安裝mysql,這裏使用了5.7.21版本,具體過程不做詳細說明,可自行查資料如何下載

二、配置

1.master配置,/etc/my.cnf文件入下
[mysqld]
port=3306
server-id=1
basedir=/home/shared_disk/mysql-5.7.21
datadir=/home/shared_disk/mysql-5.7.21/data
socket=/home/shared_disk/mysql-5.7.21/data/mysql.sock
symbolic-links=0
log-error=/home/shared_disk/mysql-5.7.21/data/error.log


pid-file=/home/shared_disk/mysql-5.7.21/data/mysql.pid

#skip-grant-tables

#開啟gtid模式,global transaction identified
gtid-mode=on
#保證gtid強一致性
enforce-gtid-consistency=1
#slave記錄binlog,否則slave執行完relay log後就刪了,找不到slave的執行記錄
log_slave_updates
#按行記錄binlog
binlog_format=row
#binlog文件名
log-bin=/home/shared_disk/mysql_datadir/mysql-bin


#需要記錄binlog的數據庫,即需要同步的數據庫,同步是通過binlog實現的
binlog-do-db=allen
#不需要記錄binlog的數據庫
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys

其中紅色部分是主從同步必須的配置

2.啟動主庫,安裝到系統服務的直接service命令啟動即可,沒安裝的運行mysqld --defaults-file=/etc/my.cnf --user=mysql &

3.登錄主庫,創建主從復制的賬號


create user ‘sync‘@‘localhost‘ identified by ‘sync‘;
給賬號授權
grant file,replication slave on *.* to ‘sync‘@‘localhost‘ identified by ‘sync‘;

4.slave配置

配置文件/etc/my-slave.cnf入下
[mysqld]
port=3307
server-id=2
basedir=/home/shared_disk/mysql-slave
datadir=/home/shared_disk/mysql-slave/data
socket=/home/shared_disk/mysql-slave/data/mysql.sock
symbolic-links=0
log-error=/home/shared_disk/mysql-slave/data/error.log
pid-file=/home/shared_disk/mysql-slave/data/mysql.pid

#skip-grant-tables

gtid-mode=on
enforce-gtid-consistency=1
log_slave_updates
binlog_format=row
log-bin=/home/shared_disk/mysql_datadir/mysql-bin
#從庫啟動時跳過自動啟動slave這一步
skip_slave_start=1
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys


5.啟動從庫,service命令或mysqld --defaults-file=/etc/my-slave.cnf --user=mysql &

啟動後登錄進去,執行
stop slave;
change master to master_host=‘locahost‘,master_port=3306,master_user=‘sync‘,master_password=‘sync‘,master_auto_position=1;
start slave;
show slave status\G;
看到以下兩個YES即說明主從已經搭建成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

PS:
當slave遇到問題時候,我們可以show slave status\G;看到同步情況
Retrieved_Gtid_Set: 9461bcc7-4850-11e8-a9f7-525400045eeb:1-7
Executed_Gtid_Set: 4f7a4829-9a29-11e8-aa21-525400045eeb:1-5,9461bcc7-4850-11e8-a9f7-525400045eeb:1-7。
其中9461bcc7-4850-11e8-a9f7-525400045eeb是主庫的mysql實例唯一id,4f7a4829-9a29-11e8-aa21-525400045eeb是從庫的mysql實例唯一id,
Retrieved_Gtid_Set和Executed_Gtid_Set分別為已接收的和已執行的gtid,已執行的gtid中有一個和Retrieved_Gtid一樣的,表明是執行了從主庫同步過來的事務,另一個則是本機自己執行的事務。
假設現在Executed_Gtid_Set如下:
Executed_Gtid_Set: 4f7a4829-9a29-11e8-aa21-525400045eeb:1-5,9461bcc7-4850-11e8-a9f7-525400045eeb:1-3
我們可以看到同步的gtid從4之後就沒執行了,應該是遇到錯誤了導致slave停止了,我們可以用以下操作跳過第四個gtid,讓slave繼續工作
stop slave;
set gtid_next=‘9461bcc7-4850-11e8-a9f7-525400045eeb:4‘;
begin;
commit;
set gtid_next=‘automatic‘;
start slave;
show slave status\G;
原理就是讓下一個事務指到第四個,然後begin接著commit,中間為空實現,讓slave以為這個事務執行成功了。

三、驗證

主庫建表,插入數據,去從庫看是否存在相同數據。

從庫使用show slave status\G;命令查看Retrieved_Gtid_Set和Executed_Gtid_Set。

MySql主從搭建詳細步驟