当前位置: 亚洲城ca88 > 计算机网络 > 正文

计划MySQL延迟从库的多少个好处,主从复制

时间:2020-02-10 08:11来源:计算机网络
MySQL的主从复制(replication卡塔尔关系,不太严峻的叫法是“同步”或然“主从同步”。实际上在开始时代,MySQL的主干并无法贯彻真正的“同步”(sync卡塔尔(قطر‎,而是“异步”的(a

MySQL的主从复制(replication卡塔尔关系,不太严峻的叫法是“同步”或然“主从同步”。实际上在开始时代,MySQL的主干并无法贯彻真正的“同步”(sync卡塔尔(قطر‎,而是“异步”的(async卡塔尔。

异步主从复制

MySQL主从复制它能够有三种格局,最杰出的也是最初现身的异步复制(async replication卡塔尔国,从5.5本子开首有了半合营复制(semi-sync replication卡塔尔国,到了5.7又有了进步半一齐。本文要研究的延迟从库,也是在5.6从此以后才有的职能,在此在此以前需求用percona pt-slave-delay 工具来变相达成。


别的,从5.6版本开端增添了并行复制,不过那时候依然基于schema的互相形式,功用非常差,意义比异常的小。到了5.7,才贯彻了实在的并行复制,复制作用进步广大;还会有新增加了多源复制,很有利的就会落到实处多主风流浪漫从的构造。

 

问询完MySQL复制的简史,我们切入宗旨。

核心布署步骤:

MySQL延迟从库的低价重要有几点:1、误删除时,能更加快复苏数据。一时候手抖了,把线上数据给误删除了,也许误删除库、表、其余对象,或不加WHERE条件的立异、删除,都得以让延迟从库在误操作前的大运点截至,然后举行复苏。

  • 备份还原
    • 使用mysqldump或者xtrabackup
    • 把主库现存底工数据恢复生机到从库
  • 授权

    • grant replication slave on *.*
    • 给从库三个复制binlog的账号
  • 配置复制,并运转

    • 从库上安顿复制音讯,并针对master
  • 翻开主从复制新闻

    • show slave status G

2、把延迟从库用作专项使用的备份节点。固然有料定的推移,但并不影响使用该节点作为备份角色,也不影响生育节点数据库库。

1)备份还原

3、还足以把延迟从库用作一些主题素材、案例商讨的目的。个别时候,可能有个别binlog event在平凡从库上会反常,那时就不时间在延迟从库上日益讨论研究了。

主:101

启用延迟从库的格局也挺轻巧的,下边是在MySQL 8.0的做法:

从:100

#直接用 CHANGE MASTER TO 设置,后面的N单位是秒数CHANGE MASTER TO MASTER_DELAY = N

a卡塔尔主库备份

当产生误操作须要让延迟从库在有个别地点上停下来时,用上面的通令:

aiapple@ubuntu:~$ mysqldump -uroot -p --socket=/tmp/mysqldata/node1/mysql.sock --master-data --all-databases  > all_master.sql
--master-date:记录备份时binlog位置
aiapple@ubuntu:~$ cat all_master.sql | less

--
-- Position to start replication or point-in-time recovery from
--

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=6125;

--
-- Current Database: `db1`
--

START SLAVEUNTIL {#1、直到指定的GTID位置停下{SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS} = gtid_set

 

#2、直到内定的binlog地点停下| MASTESportage_LOG_FILE = log_name, MASTER_LOG_POS = log_pos

bState of Qatar从库还原

#3、直到钦定的relay log位置停下| RELAY_LOG_FILE = log_name, RELAY_LOG_计算机网络,POS = log_pos

主库远程连选拔从库,使用source还原

#4、直到slave上三个互相线程从前从没延迟差距了就告生龙活虎段落#因为十二线程复制,区别线程的复制进程不均等,因而有反差| SQL_AFTER_MTS_GAPS }

从库加多主库白名单:

P.S,从5.7起,修改 MASTER_DELAY 选项能够在线马上生效,而没有必要重启 slave 线程。

mysql> grant all on *.* to root@192.168.1.101 WITH GRANT OPTION;  

关于具体 MASTETucson_DELAY 设置有些合适,要审时度势即使发生误操作时,DBA平均能到现场的时光,常常指出1小时左右。

设置密码:

原稿来自Wechat大伙儿号:老末饭铺

mysql> set password for root@'localhost'=password('000000');

Query OK, 0 rows affected (0.00 sec)

主库增多从库白名单:

mysql> grant all on *.* to root@192.168.1.100 identified by '000000' with grant option;

 

主库登入从库并恢复生机数据:

aiapple@ubuntu:~$ mysql -uroot -p -h 192.168.1.100

mysql> source all_master.sql

 

2)赋权 replication slave

mysql> grant replication slave on *.* to repl@192.168.1.100 identified by 'repl';
Query OK, 0 rows affected (0.00 sec)

 

3卡塔尔国 从库配置复制

#查看帮助信息
? change master to

mysql> change master to MASTER_USER='repl';
Query OK, 0 rows affected, 2 warnings (0.03 sec)

mysql> change master to MASTER_PASSWORD='repl';
Query OK, 0 rows affected, 2 warnings (0.02 sec)

mysql> change master to MASTER_HOST='192.168.1.101';
Query OK, 0 rows affected (0.03 sec)

mysql> change master to MASTER_LOG_FILE='mysql-bin.000001';

 

4)启动:

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

mysql> show slave statusG;

slave_io_running:yes
slave_sql_running:yes
#表示配置成功

mysql> show processlist;
 ---- ------------- ----------- ------ --------- ------ ----------------------------------------------------------------------------- ------------------ 
| Id | User        | Host      | db   | Command | Time | State                                                                       | Info             |
 ---- ------------- ----------- ------ --------- ------ ----------------------------------------------------------------------------- ------------------ 
|  2 | root        | localhost | NULL | Query   |    0 | init                                                                        | show processlist |
| 16 | system user |           | NULL | Connect |   60 | Waiting for master to send event                                            | NULL             |
| 17 | system user |           | NULL | Connect |   60 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL             |
 ---- ------------- ----------- ------ --------- ------ ----------------------------------------------------------------------------- ------------------ 

 

注意:

  • 主从server_id应该例外;
  • 主干开启binlog日志
  • MASTER_LOG_FILE钦命主库bin_log第多个文件;

 

半联合具名复制


 

 

布局mysql半联机复制 semi-sync

 

翻看有啥样插件

show plugin

1.主从异步复制搭建

1)主库全备,备库恢复
mysqldump -uroot -p123456 --socket=/data/mysql/node1/mysqld.sock --single-transaction -A --master-data=1 > all_db.sql
mysql -utest -ptest -h(从库IP) -P3306
mysql>source all_db.sql;
2)主库授权用户
grant replication slave on *.* to repl@'(从库IP)' identified by 'repl';
3)从库配置复制
less all_db.sql|grep "change master to"
change master to master_host='(主库IP)',master_user='repl',master_password='repl',master_log_file='XXX',master_log_pos=XXX;
start stave;
show slave statusG
4)复制检验
主库:
use db1;
insert into t1 values(10);
从库:
use db1;
select * from t1;(获得数据)
主库:
drop database db2;
从库:
show databases;(显示db2被删除)
5)查看线程
主库:show processlist;(dump线程)
从库:show processlist;(IO线程、SQL线程)
6)查看日志
从库:cd /data/mysql/node1
cat master.info
cat relay-log.info

 

2.主从半同步复制安装

1)主库安装插件
show plugins;
install PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
2)从库安装插件
show plugins;
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
3)参数设置
主库:
show variables like '%semi%';
SET GLOBAL rpl_semi_sync_master_enabled=1;
从库:
SET GLOBAL rpl_semi_sync_slave_enabled=1;
4)重启主从复制
从库:
stop slave;
start slave;
5)状态检查
show global status like '%semi%';
6)复制检查
主库:
use db1;
insert into t1 values(100);
从库:
use db1;
select * from t1;(获得数据)
7)测试延迟
从库:
stop slave;
主库:
use db1;
insert into t1 values(1);(被卡10s)
set global rpl_semi_sync_master_timeout=1000;(设置主等从时间1秒)
从库:
start slave;
stop slave;
主库:
use db1;
insert into t1 values(88);(被卡1s)

 

注意:rpl_semi_sync_master_timeout主库等待时间不能够设置大,不然会唤起主库雪崩效应;最佳在1秒内;

 

计算机网络 1.png)

计算机网络 2

 

并行复制


 

1.MySQL并行复制

#从库:
show variables like '%slave_par%';
set global slave_parallel_workers=10; 设置sql线程数为10
#重启 slave
stop slave;
start slave;
#查看线程
show processlist;(十个worker线程)

注:实际上有十一个线程,10worker线程,1个调治线程;

 

 

部分数码复制


 

有的多少复制:

在布置文件中安装

主库增多参数钦定到库:

binlog_do_db=db1

binlog_ignore_db=db1

binlog_ignore_db=db2

 

或从库增添参数

能够到表;

replicate_do_db=db1

replicate_ignore_db=db1

replicate_do_table=db1.t1

replicate_wild_do_table=db%.%          #计划安装

replicate_wild_ignore_table=db1.%     #1超越的表

 

注:提出使用在从库增添参数,那样更灵敏能够钦命到表级别;

 

一些复制

1)主库:
create database db2;
2)从库部分复制配置
配置文件中增加配置
#vim /data/mysql/my1.cnf(replicate_do_db=db2)

重启mysql
#mysqladmin -uroot --socket=XXX --port=3306 -p123456 shutdown
#/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/my1.cnf &

show slave status;
显示:replicate_do_db=db2

3)测试
主库:
use db1;
delete from t1;
从库:
use db1;
select * from t1;(任然保留数据)
主库:
use db2;
create table user(a int,b int);
从库:
use db2;
show tables;(查看到user表)

 

联级复制


 

联级复制(A->B->C)

1)从库:
#vim /data/mysql/my1.cnf(log_slave_updates)
#mysqladmin -uroot --socket=XXX --port=3306 -p123456 shutdown
#/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/my1.cnf &
2)创建新实例
在主库服务器上创建一个从库2实例
#mysqladmin -uroot --socket=XXX --port=3306 -p123456 shutdown
#kill -9 (mysqld_safe进程号)
#cp -r node1 node2
#vim my.cnf(修改相关参数,端口3307)
#chown -R mysql.mysql node2
#/usr/local/mysql56/bin/mysqld_safe --defaults-file=/data/mysql/my1.cnf &
#/usr/local/mysql56/bin/mysqld_safe --defaults-file=/data/mysql/my2.cnf &
#mysqldump -utest -ptest -hXXX -P3306 -A --master-data=1 > d731.sql(dump从库1的全备)
#mysql -uroot --socket=/data/mysql/node2/mysqld.sock -p123456 < d731.sql
3)配置从1和从2的主从
从1授权:
grant replication slave on *.* to repl@'(从2IP)' identified by 'repl';
从2配置复制:
less d731.sql|grep "change master to"
change master to master_host='(从1IP)',master_user='repl',master_password='repl',master_log_file='XXX',master_log_pos=XXX;
start stave;
show slave statusG
show processlist;
4)联级复制测试
主库:
create database db3;
从1:
show databases;(获得新建库)
从2:
show databases;(获得新建库)

 

 

监察与拍卖


 

#查看状态
show slave status;

 

成家立业与否:

slave_sql_running:

slave_io_running:

 

延时多长时间

seconds_Behind_Master

 

从库现身难题时

last_sql_errno

last_sql_error

last_io_errno

last_io_error

 

复制出错管理

广阔:1062(主键冲突),1032(记录空中楼阁)

解决:

  • 手动管理
  • 跳过复制错误:set global sql_slave_skip_counter=1

 

复制出错,大多数因为,主从数据不黄金时代致引致的;

最佳的诀要照旧实行数量主从复制的校验;percona公司有主从复制校验工具;

 

 

 

 

 

 

 

 

 

编辑:计算机网络 本文来源:计划MySQL延迟从库的多少个好处,主从复制

关键词: 亚洲城ca88