MySql主從搭建詳細步驟

環境:mysql

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

步驟:sql

1、下載安裝數據庫

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

2、配置ide

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.pidspa

#skip-grant-tablesorm

#開啓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=sysserver

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

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覺得這個事務執行成功了。

3、驗證

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

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

相關文章
相關標籤/搜索