mysql主从搭建

按装半同步插件

进入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 #开启从的半同步

在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命名
在这里插入图片描述

主同步部分数据库

主库:
[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的状态是否正常
在这里插入图片描述
一些的涉及到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开始位置,没有结束位点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL主从复制是一种常用的数据库复制技术,用于实现数据的备份、读写分离和负载均衡。下面是一种简单的MySQL主从搭建步骤: 1. 确保主服务器和从服务器上都安装了MySQL数据库,并且版本一致。 2. 在主服务器上编辑MySQL配置文件(my.cnf),启用二进制日志功能。在配置文件中添加以下内容: ``` [mysqld] log-bin=mysql-bin server-id=1 ``` `log-bin`参数指定二进制日志文件的名称,`server-id`参数指定主服务器的唯一ID。 3. 重启主服务器使配置生效。 4. 在主服务器上创建一个用于复制的用户,并授予适当的权限。例如,可以使用以下命令创建用户并授予权限: ``` CREATE USER 'replication_user'@'slave_ip' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'slave_ip'; FLUSH PRIVILEGES; ``` `slave_ip`是从服务器的IP地址,`password`是用户的密码。 5. 在主服务器上执行以下命令,获取当前二进制日志文件和位置的信息: ``` SHOW MASTER STATUS; ``` 记下输出结果中的文件名和位置信息,稍后在从服务器上配置时会使用。 6. 在从服务器上编辑MySQL配置文件(my.cnf),启用复制功能。在配置文件中添加以下内容: ``` [mysqld] server-id=2 ``` `server-id`参数指定从服务器的唯一ID,与主服务器不同即可。 7. 重启从服务器使配置生效。 8. 在从服务器上执行以下命令,配置从服务器连接到主服务器并开始复制: ``` CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='master_log_file', MASTER_LOG_POS=master_log_pos; ``` `master_ip`是主服务器的IP地址,`replication_user`和`password`是之前创建的复制用户的用户名和密码,`master_log_file`和`master_log_pos`是之前在主服务器上获取的二进制日志文件和位置信息。 9. 启动从服务器上的复制进程: ``` START SLAVE; ``` 10. 在从服务器上执行以下命令,检查复制状态: ``` SHOW SLAVE STATUS\G ``` 如果输出结果中的`Slave_IO_Running`和`Slave_SQL_Running`都为`Yes`,表示主从复制已成功搭建。 这只是一个简单的MySQL主从搭建步骤,实际环境中可能还需要考虑更多因素,如网络配置、防火墙设置等。具体操作还需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值