mysql 主从复制

发布时间:2020-07-22 05:17:24 作者:wx59ab9c6302725
来源:网络 阅读:271

一、mysql复制原理

mysql 主从复制

(1)不需要追加的情况
主和从同时搭建的新环境,就不需要备份主库数据,恢复到从库了,直接从第一个binlog(mysql-bin.000001)开头位置(120)

(2)如果主库已经工作了很长时间了,我们一般需要备份主库数据,恢复到从库,然后从库从备份的时间点起自动进行复制

mysqldump -S /data/3307/mysql.sock -A -R --triggers --master-data=2 --single-transaction >/tmp/full.sql
sed -n '22p' /tmp/full.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=325
恢复到从库:
mysql -S /data/3308/mysql.sock
mysql> set sql_log_bin=0;
mysql> source /tmp/full.sql
8、从库开启主库
mysql -S /data/3308/mysql.sock

help change master to

CHANGE MASTER TO
MASTER_HOST='10.0.0.52',
MASTER_USER='repl',
MASTER_PASSWORD='123',
MASTER_PORT=3307,
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=325;
开启主从(开启IO/SOL线程)
start slave
9、查看主从状态
show slave status\G

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
10、主从重要状态信息介绍

show slave status\G
Slave_IO_Running: Yes(io线程状态)
Slave_SQL_Running: Yes(sql线程状态)
Last_IO_Errno: 0(io线程异常状态码)
Last_IO_Error: (io线程异常详细信息)
Last_SQL_Errno: 0(sql线程状态码)
Last_SQL_Error: (sql线程异常详细信息)

三 、 主从复制常见异常解决思路

2、主库二进制文件丢失或损坏
解决方案;
stop slave;
reset slave all;
从新备份恢复
change master to
start slave;

处理方法跳过这个错误
stop slave;
set global sql_slave_skip_counter=1;
start slave;
/etc/my.cnf
slave-skip-errors=1032,1062,1007
但是,以上操作有的时候时候是有风险的,最安全的方法是从新构建新的主从
如何预防?
修改从库为只读库
set global read_only=1;
vim /etc/my.cnf
read_only=1(这个参数只能控制普通用户)

默认的主从复制是异步的过程

主库原因
1、主库做修改操作之后,才会记录二进制日志
2、主库的压力特别大(大事务,多事物)
3、从库数量多,导致domp线程繁忙
从库原因:
1、relay-log写入慢
2、sql线程慢(主从硬件差异较大)
解决思路
主库
1、sync_binlog=1(1表示只要主库做了一次commit,二进制日志就会立刻刷新到磁盘,如果等于0要根据系统binlog决定)
2、大事物拆分成小事物,多事物进行分离
3、使用多级主从,分库分表架构
4、将binlog放在ssd或者flash上,高性能存储
从库
1、将relay放到ssd或者flash上
2、尽量选择和主库一样的硬件配置

四、主从复制其他特性

加载插件

主:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

从:
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
查看是否加载成功:
show plugins;

启动:
主:
SET GLOBAL rpl_semi_sync_master_enabled = 1;

从:
SET GLOBAL rpl_semi_sync_slave_enabled = 1;

重启从库上的IO线程
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;

查看是否在运行
主:
show status like 'Rpl_semi_sync_master_status';
从:
show status like 'Rpl_semi_sync_slave_status';

补充:
rpl_semi_sync_master_timeout | 10000
默认情况先,到达10秒钟还没有ack,主从关系自动切换为普通复制
如果是1主多从的半同步复制,只要有一台落地relaylog,返回ack,这次半同步就完成了。

mysql>stop slave;

mysql>CHANGE MASTER TO MASTER_DELAY = 60;

mysql>start slave;

mysql> show slave status \G
SQL_Delay: 300

取消延时:
mysql> stop slave;
mysql> CHANGE MASTER TO MASTER_DELAY = 0;
mysql> start slave;

从库方面控制:
白名单:只执行白名单中列出的库或者表的中继日志

--replicate-do-db=test (哪个库)
--replicate-do-table=test.t1 (哪个库的哪个表)
--replicate-wild-do-table=test.x* (模糊的匹配)

黑名单:不执行黑名单中列出的库或者表的中继日志
--replicate-ignore-db
--replicate-ignore-table
--replicate-wild-ignore-table

只复制world数据库的数据
在从库配置
vi /etc/my.cnf
replicate-do-db=world
重启从库

查询:show slave status \G
replicate-do-db = world

db01:10.0.0.51/24

vim /etc/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/application/mysql/data
socket=/tmp/mysql.sock
log-error=/var/log/mysql.log
log_bin=/data/binlog/mysql-bin
binlog_format=row
skip-name-resolve
server-id=51
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[client]
socket=/tmp/mysql.sock

slave1:
db02:10.0.0.52/24

vim /etc/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/application/mysql/data
socket=/tmp/mysql.sock
log-error=/var/log/mysql.log
log_bin=/data/binlog/mysql-bin
binlog_format=row
skip-name-resolve
server-id=52
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[client]
socket=/tmp/mysql.sock

slave2:
db02:10.0.0.53/24

vim /etc/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/application/mysql/data
socket=/tmp/mysql.sock
log-error=/var/log/mysql.log
log_bin=/data/binlog/mysql-bin
binlog_format=row
skip-name-resolve
server-id=53
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[client]
socket=/tmp/mysql.sock

三台节点分别初始化数据:

/application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/application/mysql/data/

分别启动三个节点mysql:

/etc/init.d/mysqld start

测试启动情况:
mysql -e "show variables like 'server_id'"

master:51
slave:52,53

51:
grant replication slave on . to repl@'10.0.0.%' identified by '123';

52\53:

change master to master_host='10.0.0.51',master_user='repl',master_password='123' ,MASTER_AUTO_POSITION=1;

start slave;


推荐阅读:
  1. MySQL主从复制认识
  2. MySQL设置主从复制

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql 主从复制 主从复制常见故障

上一篇:vue-cli搭建的项目中引入jquery和bootstrap

下一篇:mysql 实例下具体查看库,和表的大小

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》