进入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
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 #开启从的半同步
vi /etc/my.cnf
[mysqld]
rpl_semi_sync_master_enabled = 1 #开启主的半同步配置
rpl_semi_sync_slave_enabled = 1 开启从的半同步
show global VARIABLES like 'gtid_mode'
每次打开和关闭时 打开–>过度模式–>完全打开
#开启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';
vi /etc/my.cnf
[mysqld]
gtid-mode=ON
enforce-gtid-consistency=on
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就会忽略掉
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命名
主库:
[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的立即落盘
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.
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的状态是否正常
一些的涉及到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 #主的服务名
位点的起始位置也可以通过执行从的 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开始位置,没有结束位点