mysql主从搭建

mysql主从搭建

  • 按装半同步插件
  • 开启半同步
    • 查看半同步
    • 开启半同步
      • 在命令行执行开启半同步
      • 在my.cnf配置文件开启半同步
  • 开启GTID
    • 查看GTID
    • 开启或关闭GTID
      • 在命令行执行开启GTID
      • 在my.cnf配置文件开启GTID
    • slave忽略master的gtid
  • binlog设置
    • 开启binlog日志
    • 主同步部分数据库
    • 从接收同步部分数据库
  • 设置主的半同步参数
  • 设置从的半同步参数
    • 修改server-uuid
    • 设置具体参数
      • 从挂到主上基于gtid
      • 从挂到主基于位点
    • 从成功状态的检查
  • binlog解析

按装半同步插件

进入mysql的命令行界面

cd /usr/local/mysql/bin
./mysql -h127.0.01 -uroot -p

然后再mysql命令行界面执行

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'
show plugins

mysql主从搭建_第1张图片

开启半同步

查看半同步

SHOW STATUS like 'Rpl_semi_sync_master_status' #查看主半同步状态
SHOW STATUS like 'Rpl_semi_sync_slave_status' #查看从半同步状态

开启半同步

在命令行执行开启半同步

在命令行执行开启半同步命令后,若机器重启后就会失效要重新执行

set global rpl_semi_sync_master_enabled = 1 #开启主的半同步
set global rpl_semi_sync_slave_enabled = 1 #开启从的半同步

在my.cnf配置文件开启半同步

vi /etc/my.cnf
[mysqld]
rpl_semi_sync_master_enabled = 1   #开启主的半同步配置
rpl_semi_sync_slave_enabled = 1  开启从的半同步

开启GTID

查看GTID

show global VARIABLES like 'gtid_mode'

在这里插入图片描述

开启或关闭GTID

在命令行执行开启GTID

每次打开和关闭时 打开–>过度模式–>完全打开

#开启GTID
SET GLOBAL ENFORCE_GTID_CONSISTENCY = 'WARN';
SET GLOBAL ENFORCE_GTID_CONSISTENCY = 'ON';
SET GLOBAL GTID_MODE = 'OFF_PERMISSIVE';
SET GLOBAL GTID_MODE = 'ON_PERMISSIVE';
SET GLOBAL GTID_MODE = 'ON';
关闭步骤-->停止-->过度模式-->完全关闭
stop slave;  #如果是从库的话可以先停掉从库
SET GLOBAL GTID_MODE = 'ON_PERMISSIVE';
SET GLOBAL GTID_MODE = 'OFF_PERMISSIVE';
SET GLOBAL GTID_MODE = 'OFF';

在my.cnf配置文件开启GTID

vi /etc/my.cnf
[mysqld]
gtid-mode=ON
enforce-gtid-consistency=on

slave忽略master的gtid

stop slave;
set gtid_next='4001f991-7457-11e9-a33a-000c29362686:1';
begin;commit;
set gtid_next='automatic';
start slave;

将"4001f991-7457-11e9-a33a-000c29362686:1"的GTID加入了从的GTID集合,并且内容为空,以后从在拉主时,遇到这个GTID就会忽略掉

binlog设置

开启binlog日志

show master status 如果未查到任何数据,则为mysql的binlog未开启

show VARIABLES LIKE '%log_bin%'  #ON||OFF 查看binlog日志是否打开
如果为OFF可以通过以下配置来开启binlog
vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin    #也可以配置一个绝对路径

binlog日志会默认生成在mysql的datadir目录下,
比如datadir=/usr/local/mysql/data 那么binlog的日志会存在在datadir目录下以mysql-bin命名
mysql主从搭建_第2张图片

主同步部分数据库

主库:
[mysq1d] 
#开启日志
log-bin = mysql-bin 
#设置服务id ,主从不能一致
server-id = 1
#设置需要同步的数据库user_db
binlog-do-db=user_db
#设置需要同步的数据库product_db 即增加多个binlog-do-db即可
binlog-do-db=product_db
#屏蔽系统库同步
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema

从接收同步部分数据库

从库设置同步的库与表
#设置需要同步的数据库
replicate_wild_do_table=user_db.%
replicate_wild_do_table=user_db.%
replicate_wild_do_table=user_db.%
replicate_wild_do_table=user_db.%
#屏蔽系统库同步
replicate_wild_ignore_table=mysq1.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%

设置主的半同步参数

1.show global VARIABLES like 'gtid_mode' #查看主的GTID模式是否为打开,如果想打开详见"开启GTID"
2. SHOW STATUS like 'Rpl_semi_sync_master_status' #查看主半同步状态  
   结果为 ON||OFF  具体开启半同步状态详见上方"开启半同步"
3. show VARIABLES LIKE '%log_bin%' #查看log_bin是否打开
   结果为 ON||OFF  具体开启log_bin详见上方"开启binlog日志"
4.show master status  #查看主的binlog日志信息,如果没有显示出来,则详见上方的"开启binlog日志"操作
5.show variables like ‘% Rpl_semi_sync%’ #查看主的半同步变量
6.set global rep_semi_sync_master_wait_for_slave_count=1 设置主的应答数
7.set global rpl_semi_sync_master_timeout=10000  //毫秒 超过这个时间转为异步
8.set global rpl_semi_sync_master_trace_level=32  //默认值_能够输出详细的信息
----------从的设置start--------------
9.set global rpl_semi_sync_slave_enabled=OFF||ON //从库是否打开半同步
10.set global rpl_semi_sync_slave_trace_level=32 //默认值slave的trace等级
----------从的设置end---------------
11.set global rpl_semi_sync_master_wait_no_slave=ON||off //默认为ON
12.set global rpl_semi_sync_master_wait_point=AFTER_SYNC||AFTER_COMMIT 默认为AFTER_SYNC
13.set global innodb_flush_log_at_trx_commit=1 #redolog的立即落盘  也可以通过vi /etc/my.inf文件 在[mysqld] 下增sync_binlog=1 配置项
14.set global sync_binlog=1 #binlog的立即落盘

设置从的半同步参数

修改server-uuid

vi /usr/local/mysql/data/auto.cnf
修改server-uuid的值 始其与主不同,否则到时从挂主的时候会报

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.

设置具体参数

1.show global VARIABLES like 'gtid_mode' #查看主的GTID模式是否为打开,如果想打开详见"开启GTID"
2.SHOW STATUS like 'Rpl_semi_sync_slave_status'  #查看从的半同步状态
   结果为 ON||OFF  具体开启半同步状态详见上方"开启半同步"
3. show VARIABLES LIKE '%log_bin%' #查看log_bin是否打开
   结果为 ON||OFF  具体开启log_bin详见上方"开启binlog日志"
4.show master status  #查看主的binlog日志信息,如果没有显示出来,则详见上方的"开启binlog日志"操作
5.show variables like  '%Rpl_semi_sync%'#查看主的半同步变量
----------从的设置start--------------
6.set global rpl_semi_sync_slave_enabled=OFF||ON //从库是否打开半同步
7.set global rpl_semi_sync_slave_trace_level=32 //默认值slave的trace等级
----------从的设置end---------------```
8.set global innodb_flush_log_at_trx_commit=1 #redolog的立即落盘
9.set global sync_binlog=1 #binlog的立即落盘

从挂到主上基于gtid
show slave status
stop slave;
change master to master_host='xxxipxxx',master_user='root',master_password='root',master_port=3306,master_auto_position=1
start slave;

如果主库没有开启GTID,则change maste 使用了master_auto_position=1会报如下错误
需要开启主的GTID 详见"开启GTID"章节的说明

The replication receiver thread cannot start in AUTO_POSITION mode: 
the master has GTID_MODE = OFF instead of ON.

从挂到主上基于gtid

show slave status
stop slave;
change master to master_host='xxxipxxx',master_user='root',master_password='root',master_port=3306,master_auto_position=1
start slave;

从挂到主基于位点

位点的信息可以通过show slave master来查看

STOP SLAVE;
CHANGE_MASTER TO
MASTER_HOST = 'localhost',
MASTER_USER = 'db_sync',
MASTER_PASSWORD = 'db_sync',
MASTER_LOG_FILE = 'myaql-bin.000009',
MASTER_LOG_POS = 154;
START SLAVE;
SHON SLAVE sTATUS

从成功状态的检查

执行 show slave status 然后主要看IO,SQL的状态是否正常
mysql主从搭建_第3张图片
一些的涉及到master的关键列

Master_Host=192.168.201.140              #主的IP
Master_User=root                         #主的用户名
Master_Port=3306                         #主的端口号
Master_Log_File=mysql-bin.000020         #主的目前解析到的binlog文件名
Read_Master_Log_Pos=194                  #读取到的主的binlog的位点
Exec_Master_Log_Pos=194                  #已执行到的主的binlog的位点
Master_UUID=4001f991-7457-11e9-a33a-000c29362686 #主的服务名

binlog解析

位点的起始位置也可以通过执行从的 show slave status 来获得详见"设置从的半同步参数–>从成功状态的检查" 章节说明

/usr/local/mysql/bin/mysqlbinlog --no-defaults -v --base64-output=DECODE-ROWS --start-position=154 --stop-position=1906  mysql-bin.000009
start-position 为binlog位点的超始
stop-position 为binlog位点的结束
mysql-bin.000009 为解析的具体binlog文件

也可以只有start-position开始位置,没有结束位点

你可能感兴趣的:(mysql主从搭建)