linux mysql的主从复制(GTID)/并行复制/无损复制

安装mysql

本次使用五个rpm包安装

安装后修改密码即可

密码默认在log中

初始化修改即可

开启mysql二进制日志

可以设定徐亚同步的数据库或不需要的数据库

进入mysql创建备份账户

查看日至位置以及pos在备份机使用

grant replication slave on  *.* to  'bobo'@'172.25.15.%'  identified by 'Hh~802119323'

备份机设置同主机

但把server-id改为2即可

进入mysql配置即可

都出现yes为正确设置

测试

主机上的数据被备份成功

基于GTID

GTID是对于一个已提交事务的编号,并且是一个全局唯一的编号。
​GTID = source_id :transaction_id
每一个 GTID 代表一个数据库事务
在mysql的数据目录(/var/lib/mysql)里查看二进制日志

配置主机my.cnf

添加gtid数据

备份主机配置

change master to master_host='172.25.15.12', master_user='bobo',master_password='Hh~802119323',master_auto_position=1;

查看状态

Slave_IO_Running, Slave_SQL_Running为YES,

Slave_SQL_Running_State 为Slave has read all relay log; waiting for more updates时表示成功构建复制链路

可以在备份主机上看到个gtid  测试成功

半同步复制

半同步复制:异步复制和同步复制的折中,主库上提交事务时,需要等待至少一个从库发来的收到事件确认信息,才向客户端返回成功。

主节点安装 rpl_semi_sync_master 插件

root@localhost:mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

Query OK, 0 rows affected (0.17 sec)

root@localhost:mysql>show variables like '%rpl%';

+-------------------------------------------+------------+

| Variable_name                             | Value      |

+-------------------------------------------+------------+

| rpl_semi_sync_master_enabled              | OFF        |

| rpl_semi_sync_master_timeout              | 10000      |

| rpl_semi_sync_master_trace_level          | 32         |

| rpl_semi_sync_master_wait_for_slave_count | 1          |

| rpl_semi_sync_master_wait_no_slave        | ON         |

| rpl_semi_sync_master_wait_point           | AFTER_SYNC |

| rpl_stop_slave_timeout                    | 31536000   |

+-------------------------------------------+------------+

7 rows in set (0.03 sec)

备节点安装 rpl_semi_sync_slave 插件

root@localhost:mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

Query OK, 0 rows affected (0.15 sec)

root@localhost:mysql>show variables like '%rpl%';

+---------------------------------+----------+

| Variable_name                   | Value    |

+---------------------------------+----------+

| rpl_semi_sync_slave_enabled     | OFF      |

| rpl_semi_sync_slave_trace_level | 32       |

| rpl_stop_slave_timeout          | 31536000 |

+---------------------------------+----------+

3 rows in set (0.03 sec)

主节点my.cnf配置增加以下

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=10000 

备节点

rpl_semi_sync_slave_enabled=1

关闭从库后,在主库上创建一张表延迟了 10 秒左右,刚好是参数 rpl_semi_sync_master_timeout 设置的值。

关于数据手动备份恢复

在备份数据被从库恢复时 恢复文件中会有sql语句删除已经存在的table——————mysqldump

二进制日志的恢复

基于行的日志格式 binlog_format=ROW

  • 这是mysql5.7之后默认的二进制日志格式
  • 记录的是增删改查的数据行信息
  • 优点:
    • 使mysql主从复制更加安全
    • 对每一行数据的修改比基于段的复制高效
    • 由于误操作修改数据库信息,且没有备库可恢复时,可通过对日志文件数据操作反向处理恢复数据
  • 缺点:
    • 记录日志量较大
      • binlog_row_image =[FULL|MINIMAL|NOBLOB]

基于时间恢复数据

mysqlbinlog –no-defaults   –stop-datetime=’2017-04-11 09:48:48’/var/lib/mysql/mysql-bin.000007 |mysql –uroot –pHh~802119323

基于position恢复数据

mysqlbinlog –no-defaults –start-position=”1159” –stop-position=”1594” /varlib/mmysql/binlog.000007 | mysql -u root -pHh~802119323

并行复制

slave端开启  my.cnf

slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON

无损复制

官方文档

https://dev.mysql.com/doc/refman/5.7/en/replication-semisync-installation.html

On the master:

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

On each slave:

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

查看状态

SELECT PLUGIN_NAME, PLUGIN_STATUS
       FROM INFORMATION_SCHEMA.PLUGINS
       WHERE PLUGIN_NAME LIKE '%semi%';

 master-

SET GLOBAL rpl_semi_sync_master_enabled = {0|1};
SET GLOBAL rpl_semi_sync_master_timeout = N;

 slave

SET GLOBAL rpl_semi_sync_slave_enabled = {0|1};

重启io

STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;

测试 在添加数据后  slave端看到收到两条信息

slave 端看master yes tx数据可以看到几条信息

可以看到设置本slave的maser与slave状态都开启

mysql group replication 去中心化

官方文档

https://dev.mysql.com/doc/refman/5.7/en/group-replication-adding-instances.html

配置解析用于主机互相连接

编辑配置文件

修改serverid  本机ip即可

登陆数据库  修改初始密码

 ALTER USER root@localhost identified  by  'Hh~802119323'

 SET SQL_LOG_BIN=0;

CREATE USER rpl_user@'%' IDENTIFIED BY 'Hh~802119323'

 GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';

 FLUSH PRIVILEGES;

reset master;

CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Hh~802119323' FOR CHANNEL 'group_replication_recovery';

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

SHOW PLUGINS;

SET GLOBAL group_replication_bootstrap_group=ON;

START GROUP_REPLICATION;           

SET GLOBAL group_replication_bootstrap_group=ON;

SET GLOBAL group_replication_bootstrap_group=OFF;

下图为正确结果

配置第二台加入集群的主机

SET SQL_LOG_BIN=0;

CREATE USER rpl_user@'%' IDENTIFIED BY 'password';

GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';

SET SQL_LOG_BIN=1;

CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';

start GROUP_REPLICATION;

看到下图即可

节点三与节点的配置相同 不再赘述

测试  在2节点创创建数据库 以节点可以看到

猜你喜欢

转载自blog.csdn.net/iaMay_____/article/details/81489860
今日推荐