MySql主从搭建详细步骤
环境:
linux64位,⼀台机器两个实例,主库3306端⼝,从库3307端⼝
步骤:
⼀、下载安装
先下载安装mysql,这⾥使⽤了5.7.21版本,具体过程不做详细说明,可⾃⾏查资料如何下载
⼆、配置
1.master配置,/etc/myf⽂件⼊下
[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.logmysql下载配置
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/myf --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-slavef⼊下
[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-slavef --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。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论