当前位置: 澳门新濠3559 > 操作系统 > 正文

今天来说说第二技能--主从复制,一次老王一不小

时间:2019-10-13 04:21来源:操作系统
当前环境规划 前言 前篇说了作为运维在数据库块最起码要会两大技能,今天来说说第二技能--主从复制 随着业务的增长,一台数据库服务器以满足不了需求了,负载过重,这时候就需

当前环境规划

澳门新濠3559 1

前言

前篇说了作为运维在数据库块最起码要会两大技能,今天来说说第二技能--主从复制

随着业务的增长,一台数据库服务器以满足不了需求了,负载过重,这时候就需要减压,实现负载均衡读写分离,一主一从或一主多从

主服务器只管写,从服务器管读,从而提高效率减轻压力。

主从复制分类:

主从同步:当用户写数据主服务器必须和从服务器同步一致了才告诉用户写入成功,等待时间太长

主从异步:只要用户访问写数据主服务器写入立马返回给用户成功

主从半步同步:当用户访问写数据主服务器写入并同步其中一个从服务器就返回给用户成功

备注:通常都是使用的主从异步,根据环境需求来选择,想要数据更安全选择半步同步

主机名称 

Mysql实现企业级数据库主从复制架构实战

主从复制注意事项

注意:selinux策略、防火墙

1、开启二进制日志

log_bin

2、设置二进制记录格式为ROW(推荐)

3、设置唯一server-id

server_id=#

4、设置datadir中日志名称(可选)

log-basename=master

5、创建有复制权限的用户账号

GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'HOST' IDENTIFIED BY 'replpass';

6、如果要启用级联复制,需要在从服务器启用

log_bin
log_slave_updates

7、限制从服务器为只读

read_only=ON

8、禁止主机名解析

skip_name_resolve = on

9、高可用从服务器要加上

relay_log_purge=0 #不清除中继日志

10、如何保证主从复制的事务安全(根据需求添加)

1)在master节点启用参数:

sync_binlog=1
# 每次写后立即同步二进制日志到磁盘,性能差

2)如果用到的为InnoDB存储引擎:

innodb_flush_log_at_trx_commit=1 
# 每次事务提交立即同步日志写磁盘
innodb_support_xa=ON 
# 默认值,分布式事务MariaDB10.3.0废除
sync_master_info=# 
# #次事件后master.info同步到磁盘

3)在slave节点启用参数:

sync_relay_log=# 
# #次写后同步relay log到磁盘
sync_relay_log_info=#
# #次事务后同步relay-log.info到磁盘

ec2t-pgtest-01

  环境背景:公司规模已经形成,用户数据已成为公司的核心命脉,一次老王一不小心把数据库文件删除,通过mysqldump备份策略恢复用了两个小时,在这两小时中,公司业务中断,损失100万,老王做出深刻反省,公司也因此对于数据库的性能和可靠性提出更高要求。

主从复制原理

如图

澳门新濠3559 2

备注:

主从同步有延迟,为什么?因为它时是单线程传送日志

ec2t-pgtest-02

要求对数据库进行改造,使其承载力进行提升,故障修复时间减少,有没有能实现的方案呢?

实战-实现主从复制 高可用

IP地址

Mysql实现数据库主从复制实战架构及其原理

澳门新濠3559,准备工作

准备4台主机67、17、37、57,分别充当角色为管理主机、主服务器、2个从服务器

安装包:和主服务器同版本的mysql数据库包、和高可用安装包

mha4mysql-manager

mha4mysql-node

比如主服务器已经运行了1年了,发现满足不了需求了,需要搭建从服务器,我们先从搭建从服务器开始

备注:首先确保主服务器开启了二进制日志

确认二进制文件已启动

MariaDB [(none)]> show variables like '%log_bin%'

确认server-id

MariaDB [(none)]> show variables like 'server%';

10.189.102.118

1、实验架构及其原理

数据库高可用架构分为

主从:一主一从,一主多从,一主从从

双主

澳门新濠3559 3

澳门新濠3559 4

主服务器设置

1、创建可用于复制的账号

grant replication slave on *.* to repluser@'192.168.43.%' identified by 'centos';

2、完全备份数据(用于在从服务器上来还原)

mysqldump -pcentos -A -F --single-transaction --master-data=1 >/data/all-`date  %F`.sql

备注:备份时的某表的状态

澳门新濠3559 5

为了下面的实验测试在这里我们备份玩再增加一条记录

insert hellodb.students (name,age)values('gaoda001',20);

澳门新濠3559 6

3、传送到从服务器37、57上

scp…

10.189.100.195

2、过程分析

(1)主数据库(innodb引擎)的操作:

① 一个写的请求,先写到redo事务日志中,

② mysql的进程读事务日志,事务日志的内容做到数据库内存中;此时可以回复客户端,数据为脏数据

③ 请求的操作记录到二进制日志

二进制日志再写磁盘中写;优化策略,变随机写为顺序写

(2)从数据库的操作:

I/O thread线程:从主的数据库上,把二进制文件的内容过来,写到relay log中继日志

SQL thread线程:把relay log内容拉出来,写到数据库内存

⑦ 从数据库也可以把执行的操作记录到自己的二进制文件中,非必须

⑧ 从数据库的二进制写到自己的磁盘

 

37、57(从)服务器设置

角色

3、主从的优势

一个master 写入,多个slave同时读出;大大提高了读的效率

现实中,很多都是读的请求大,写的请求相对小的多,如电商网站,大多都是人们去访问,下单的较少;所以主从的关系已经能很好的提高性能了

 

1、配置文件
vim /etc/my.cnf

1)开启二进制日志

log-bin=mysql-bin

2)设置server-id(要和主服务id区分开)

server-id=2

备注:57设置为3 只要他们不相同就可

3)从服务器设置为只读

read_only=on

4)禁止主机名解析

skip_name_resolve = on

5)数据和索引分开存放

innodb_file_per_table = on 
# 10版本以上默认开启

6)重启或启动服务

备注:以防万一可以查看下最重要的两项开启了没有

mysql -e "show variables like 'log%'"
mysql -e "show variables like 'server%'"

master      

4、实验前准备

① iptables -F && setenforce 清空防火墙策略,关闭selinux

② 拿两台服务器都使用yum 方式安装Mysql 服务,要求版本一致

③ 分别启动两台服务器mysql

 

2、实现复制

1)进入数据库查找同步代码

MariaDB [(none)]> help change
MariaDB [(none)]> help change master to 

澳门新濠3559 7

2)根据情况编辑上图上的信息

注:起始位置可以在完全备份文件里查看

两种方式:

① 先还有完全备份数据再拿以上信息编辑下,在数据库中执行

② 直接把上面的信息添加到完全备份文件里

下面用第二种方式来操作如图

澳门新濠3559 8

3)37主机还原并查看

mysql < all-2018-08-08.sql

澳门新濠3559 9

备注:以还原到备份时的状态

           主服务器备份完有用户新加数据对吧,下面开启主从复制看看能不能复制过来最新的数据

4)查看复制状态

MariaDB [(none)]> show slave statusG
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 192.168.43.17
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000005  
          Read_Master_Log_Pos: 385       #从主服务器读取到的位置
               Relay_Log_File: centos7_05-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000005
             Slave_IO_Running: No       #表示还没开启
            Slave_SQL_Running: No       #表示还没开启
              Replicate_Do_DB:  
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 385
              Relay_Log_Space: 256
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: NULL   ##注意这个 表示同步时间差
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 0
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
                   Using_Gtid: No
                  Gtid_IO_Pos: 
      Replicate_Do_Domain_Ids: 
  Replicate_Ignore_Domain_Ids: 
                Parallel_Mode: conservative
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: 
1 row in set (0.03 sec)

5)开启主从复制并查看状态

start slave;

MariaDB [(none)]> show slave statusG
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.43.17
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000005
          Read_Master_Log_Pos: 608
               Relay_Log_File: centos7_05-relay-bin.000003
                Relay_Log_Pos: 778
        Relay_Master_Log_File: mysql-bin.000005
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 608
              Relay_Log_Space: 1092
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
                   Using_Gtid: No
                  Gtid_IO_Pos: 
      Replicate_Do_Domain_Ids: 
  Replicate_Ignore_Domain_Ids: 
                Parallel_Mode: conservative
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
1 row in set (0.00 sec)

6)查看表确认有没有从主服务器同步最新的数据

澳门新濠3559 10

7)57(从服务器同样的设置)

备注:目前现实了异步同步复制,下面来看半同步设置

slave    

实战一:Mysql实现数据库简单一主多从复制实战

澳门新濠3559 11

半同步设置

系统版本  

1、环境准备

centos 系统服务器3 台、一台用户做Mysql 主服务器,2台用于做Mysql 从服务器,配置好yum 源、 防火墙关闭、各节点时钟服务同步、各节点之间可以通过主机名互相通信

机器名称

IP配置

服务角色

备注

master-mysql

192.168.30.107

主数据库

二进制日志

slave-mysql1

192.168.30.7

从数据库

中继日志

slave-mysql2

192.168.30.2

从数据库

中继日志

 

主服务器设置

1、首先在主服务器上安装插件

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

备注:

show plugins; ##查看当前系统中的插件列表

UNINSTALL PLUGIN rpl_semi_sync_master;##卸载插件

2、查看插件状态

SHOW GLOBAL VARIABLES LIKE '%semi%';

澳门新濠3559 12

3、开启

set global rpl_semi_sync_master_enabled=on;

备注:最好写在配置文件中

澳门新濠3559 13

4、查看插件变量状态

SHOW GLOBAL STATUS LIKE '%semi%';

澳门新濠3559 14

备注:这里记录有几个半同步主机

CentOS release 6.8

2、在主master 主服务器上

① vim /etc/my.cnf 修改mysql主配置文件,对master进行配置,包括打开二进制日志,指定唯一的servr ID

server-id=1             #配置server-id,让主服务器有唯一ID号
log-bin=mysql-bin   #打开Mysql日志,日志格式为二进制
skip-name-resolve   #关闭名称解析,(非必须)

澳门新濠3559 15

systemctl start mariadb 开启服务

 

创建并授权slave mysql 用的复制帐号

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave@'192.168.%.%' IDENTIFIED BY 'along';
分析:在Master的数据库中建立一个备份帐户:每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE权限。

③ 查看主服务器状态

在Master的数据库执行show master status,查看主服务器二进制日志状态,位置号

澳门新濠3559 16

 

从服务器设置

1、安装插件

INSTALL PLUGIN rpl_semi_sync_slave SONAME  'semisync_slave.so';

2、启动插件

set global rpl_semi_sync_slave_enabled=on;

备注:同样建议写在配置文件中

澳门新濠3559 17

3、从服务器查看改插件是否开始工作

SHOW GLOBAL STATUS LIKE '%semi%';

澳门新濠3559 18

为什么没有开始工作?

因为是先开启的主从复制再安装的次插件

所以这种情况下,先停止从服务器的主从复制功能

1)停止:

stop slave;

2)再次开启主从复制

start slave;

3)再去查看

澳门新濠3559 19

备注:现在就启用了半同步功能,下面开始搭建高可用,实现主服务器宕机自动提升从服务器当主

数据版本  

3、在从slave mysql1上

① 修改主配置文件

vim /etc/my.cnf 打开中继日志,指定唯一的servr ID,设置只读权限

server-id=2       #配置server-id,让从服务器有唯一ID号
relay_log = mysql-relay-bin    #打开Mysql日志,日志格式为二进制
read_only = 1    #设置只读权限
log_bin = mysql-bin         #开启从服务器二进制日志,(非必须)
log_slave_updates = 1  #使得更新的数据写进二进制日志中

澳门新濠3559 20

systemctl start mariadb 开启服务

 

启动从服务器复制线程,让slave连接master,并开始重做master二进制日志中的事件。

MariaDB [(none)]> change master to master_host='192.168.30.107',
    -> master_user='slave',
    -> master_password='along',
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=245;
MariaDB [(none)]>  start slave;   # 启动复制线程,就是打开I/O线程和SQL线程;实现拉主的bin-log到从的relay-log上;再从relay-log写到数据库内存里

③ 查看从服务器状态

可使用SHOW SLAVE STATUSG查看从服务器状态,如下所示,也可用show processlist G查看当前复制状态:

Slave_IO_Running: Yes #IO线程正常运行

Slave_SQL_Running: Yes #SQL线程正常运行

澳门新濠3559 21

 

MHA高性能

备注:四台主机之间必须是ssh基于key验证登陆,所以要先实现ssh互相链接

步骤:

ssh-keygen

cd .ssh

ssh-copy-id 192.168.43.67

把.ssh目录考到其他主机

1、在主服务器上创建管理者账号

grant all on *.* to mhauser@'192.168.43.%' identified by 'centos';

2、在67管理主机上安装以下包

mha4mysql-manager 
mha4mysql-node

3、在17、37、57安装如下包

mha4mysql-node

4、在管理主机创建管理节点

mkdir /etc/mastermha/
cd /etc/mastermha/
vim app1.cnf

根据上面创建的信息填写

[server default]
user=mhauser
password=centos
manager_workdir=/app/mastermha/app1/
manager_log=/app/mastermha/app1/manager.log
remote_workdir=/app/mastermha/app1/
ssh_user=root
repl_user=repluser
repl_password=centos
ping_interval=1
##以上是全局设置

##以下是针对某一组集群设置
[server1]
hostname=192.168.43.17
candidate_master=1
[server2]
hostname=192.168.43.37
candidate_master=1
[server3]
hostname=192.168.43.57
candidate_master=1

备注:

candidate_master=1:是说主服务器宕机了带有这项的主机有机会当主

5、测试

1)ssh协议

/usr/bin/masterha_check_ssh --conf=/etc/mastermha/app1.cnf

2、检查复制

masterha_check_repl --conf=/etc/mastermha/app1.cnf

3、启动(默认前台执行)

masterha_manager --conf=/etc/mastermha/app1.cnf

澳门新濠3559 22

备注:如果你是编译安装在/etc/mastermha/app1.cnf配置文件中指定日志路径,最好主从服务器数据库设置的位置都是一致的。

澳门新濠3559 23

MySQL 5.6.23

4、测试

① 在主上创建一个along库

澳门新濠3559 24

② 从上自动生成along数据库

澳门新濠3559 25

 

一. MySQL数据库安装

5、若要继续添加新salve,实现一主多从

假如master 已经运行很久了,想对新安装的slave 进行数据同步,甚至它没有master 的数据。

(1)在主master-mysql 上

① 进行完全备份
mysqldump --all-databases > /backup/mysql-all-backup-`date  %F-%T`.sql
把备份生成的文件发给salve-mysql2机器上
scp /backup/mysql-all-backup-2017-11-20-22:04:06.sql @192.168.30.2:  
② 查看现在的二进制文件状态
MariaDB [(none)]> show master status;

澳门新濠3559 26

(2)在从slave-mysql2上

① vim /etc/my.cnf 修改主配置文件,设为从

澳门新濠3559 27

② 进行master的完全备份恢复

mysql -uroot -p < mysql-all-backup-2017-11-20-22:04:06.sql

systemctl start mariadb 开启服务

恢复完后,数据直接与主完全一致

澳门新濠3559 28

启动从服务器复制线程

MariaDB [(none)]> change master to master_host='192.168.30.107',
    -> master_user='slave',
    -> master_password='along',
    -> master_log_file='mysql-bin.000003',
    -> master_log_pos=500;

澳门新濠3559 29

 

1. 创建MySQL用户和组

6、测试三台机器的一主多从关系

① 在master 上创建home数据库

澳门新濠3559 30

② 在slave-mysql1 和2 上自动生成home库

澳门新濠3559 31

 

# groupadd -g 101 dba
# useradd -u 514 -g dba -G root -d /usr/local/mysql mysqladmin

7、解除主从关系,恢复独立的服务器

① MariaDB [(none)]> stop slave; 关闭两个线程

澳门新濠3559 32

② vim /etc/my.cnf 删除3行

relay-log =mysql-relay-log
read-only = 1
log_slave_updates = 1

③ systemctl restart mariadb 重启服务

2. 配置MySQL用户环境变量

实战二:实现主从从架构及复制过滤器

澳门新濠3559 33

架构原理:一个主master,一个从slave1;从slave1再做主,另一个slave2以他为主做从;大体做法与上实验相似

复制过滤原理:复制过滤器:(黑、白名单)仅复制有限一个或几个数据库相关的数据,而非所有;由复制过滤器进行;

有两种实现思路:

(1) 主服务器
主服务器仅向二进制日志中记录有关特定数据库相关的写操作;
binlog_do_db=      #仅允许从复制这个库的二进制日志
binlog_ignore_db=  #除了这个库,其他都允许复制
(2) 从服务器
从服务器的SQL THREAD仅重放关注的数据库或表相关的事件,并将其应用于本地;
Replicate_Do_DB=       #只复制主的这个数据库数据
Replicate_Ignore_DB=  #除了这个都复制
$ cat .bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

PATH=/usr/local/mysql/bin:$PATH:$HOME/bin

export PATH

1、环境准备

机器名称

IP配置

服务角色

备注

master-mysql

192.168.30.107

主数据库

二进制日志

slave-mysql1

192.168.30.7

从数据库

中继日志

slave-mysql2

192.168.30.2

从数据库

中继日志

3. 下载MySQL二进制包并安装

2、在主master 主服务器上

① vim /etc/my.cnf  修改mysql主配置文件,对master进行配置,打开二进制日志,指定唯一的servr ID,设置复制过滤
server-id=1             #配置server-id,让主服务器有唯一ID号
log-bin=mysql-bin   #打开Mysql日志,日志格式为二进制
skip-name-resolve   #关闭名称解析,(非必须)
binlog_ignore_db=home   #除了home数据库,其他都允许从复制主的二进制文件
#binlog_do_db=along   #仅允许从复制along数据库的二进制文件

澳门新濠3559 34

systemctl start mariadb 开启服务

 

创建并授权slave mysql 用的复制帐号

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave@'192.168.%.%' IDENTIFIED BY 'along';
分析:在Master的数据库中建立一个备份帐户:每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE权限。

③ 查看主服务器状态

在Master的数据库执行show master status,查看主服务器二进制日志状态,位置号

澳门新濠3559 35

 

$ mkdir /usr/local/mysql/{data,arch}
$ wget https://downloads.mysql.com/archives/get/file/mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz
$ tar -zxf mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz
$ mv mysql-5.6.23-linux-glibc2.5-x86_64/* /usr/local/mysql/

3、在从slave mysql1上

① 修改主配置文件

vim /etc/my.cnf 打开中继日志,指定唯一的servr ID,设置只读权限

server-id=2       #配置server-id,让从服务器有唯一ID号
relay_log = mysql-relay-bin    #打开Mysql日志,日志格式为二进制
read_only = 1    #设置只读权限
log_bin = mysql-bin         #开启从服务器二进制日志,(必须)
log_slave_updates = 1  #使得更新的数据写进二进制日志中

澳门新濠3559 36

systemctl start mariadb 开启服务

 

启动从服务器复制线程,让slave连接master,并开始重做master二进制日志中的事件。

MariaDB [(none)]> change master to master_host='192.168.30.107',
    -> master_user='slave',
    -> master_password='along',
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=245;
MariaDB [(none)]>  start slave;   # 启动复制线程,就是打开I/O线程和SQL线程;实现拉主的bin-log到从的relay-log上;再从relay-log写到数据库内存里

③ 查看从服务器状态

可使用SHOW SLAVE STATUSG查看从服务器状态,如下所示,也可用show processlist G查看当前复制状态:

Slave_IO_Running: Yes #IO线程正常运行

Slave_SQL_Running: Yes #SQL线程正常运行

澳门新濠3559 37

 

4. 配置MySQL数据库(主备操作)

4、测试主从和复制过滤

(1)测试主从关系

在主上创建一个along、home库;从上自动生成along、home数据库

澳门新濠3559 38

(2)测试复制过滤

① 在主上:在along库中创建一个classes的表;从上自动生成

MariaDB [home]> create table classes (id int not null,name varchar(20));

澳门新濠3559 39

② 在主上:在home库中创建一个classes的表;从上没有生成

MariaDB [home]> create table classes (id int not null,name varchar(20));

澳门新濠3559 40

slave-mysql1 上,过滤成功

澳门新濠3559 41

 

  4.1 创建MySQL配置文件/etc/my.cnf

5、设置slave-mysql2 为slave-mysql1 的从,且在mysql2 设置复制过滤

(1)在slave-mysql1上,不用怎么设置

因为上边主配置文件已经开启了自己的二进制文件;且slave-mysql1 是从开始就同步master的,所以授权命令也同步过了

MariaDB [home]> select user,host from mysql.user; 可以查看自己授权过的用户

澳门新濠3559 42

 

(2)slave-mysql2 上,可以像上实验一样,先给主的完全备份在本机恢复一下

① 在主上完备
mysqldump --all-databases > /backup/mysql-all-backup-`date  %F-%T`.sql
scp /backup/mysql-all-backup-2017-11-21-11:14:59.sql @192.168.30.2:  

② 进行master的完全备份恢复
mysql -uroot -p < mysql-all-backup-2017-11-20-22:04:06.sql

③ 在slave-mysql2 上
vim /etc/my.cnf  修改主配置文件,设为从;且设置过滤
server-id =3
relay-log =mysql-relay-log
read-only = 1
log-bin = mysql-bin
log_slave_updates = 1
replicate_do_dB=along    #只复制它的主的along数据库

澳门新濠3559 43

systemctl start mariadb 开启服务

 

④ mysql 打开数据库,查看数据恢复成功;

启动从服务器复制线程,让slave连接master,并开始重做master二进制日志中的事件。

MariaDB [(none)]> change master to master_host='192.168.30.107',
    -> master_user='slave',
    -> master_password='along',
    -> master_log_file='mysql-bin.000008',
    -> master_log_pos=773;
MariaDB [(none)]> start slave;

⑤ MariaDB [(none)]> show slave status G; 查看,两个进程打开,且只复制主的along数据库

澳门新濠3559 44

 

# cat /etc/my.cnf 
[client]
port            = 3306
socket          = /usr/local/mysql/data/mysql.sock

[mysqld]
port            = 3306
socket          = /usr/local/mysql/data/mysql.sock

skip-external-locking
key_buffer_size = 256M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
query_cache_size= 32M
max_allowed_packet = 16M
myisam_sort_buffer_size=128M
tmp_table_size=32M

table_open_cache = 512
thread_cache_size = 8
wait_timeout = 86400
interactive_timeout = 86400
max_connections = 600

# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 32

#isolation level and default engine 
default-storage-engine = INNODB
transaction-isolation = READ-COMMITTED

server-id  = 1
basedir     = /usr/local/mysql
datadir     = /usr/local/mysql/data
pid-file     = /usr/local/mysql/data/hostname.pid

#open performance schema
log-warnings
sysdate-is-now

binlog_format = MIXED
log_bin_trust_function_creators=1
log-error  = /usr/local/mysql/data/hostname.err
log-bin=/usr/local/mysql/arch/mysql-bin
#other logs
#general_log =1
#general_log_file  = /usr/local/mysql/data/general_log.err
#slow_query_log=1
#slow_query_log_file=/usr/local/mysql/data/slow_log.err

#for replication slave
#log-slave-updates 
#sync_binlog = 1

#for innodb options 
innodb_data_home_dir = /usr/local/mysql/data/
innodb_data_file_path = ibdata1:500M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/arch
innodb_log_files_in_group = 2
innodb_log_file_size = 200M

innodb_buffer_pool_size = 2048M
innodb_additional_mem_pool_size = 50M
innodb_log_buffer_size = 16M

innodb_lock_wait_timeout = 100
#innodb_thread_concurrency = 0
innodb_flush_log_at_trx_commit = 1
innodb_locks_unsafe_for_binlog=1

#innodb io features: add for mysql5.5.8
performance_schema
innodb_read_io_threads=4
innodb-write-io-threads=4
innodb-io-capacity=200
#purge threads change default(0) to 1 for purge
innodb_purge_threads=1
innodb_use_native_aio=on

#case-sensitive file names and separate tablespace
innodb_file_per_table = 1
lower_case_table_names=1

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[mysqlhotcopy]
interactive-timeout

[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

6、测试主从从和slave-mysql2的复制过滤

(1)在主上删除job数据库,master 和slave-mysql1 都删除成功

MariaDB [home]> drop database job; 删除job库

澳门新濠3559 45

因为slave-mysql2 只同步slave-mysql1 的along库,所以没有删除

澳门新濠3559 46

 

(2)在主上的along数据库,创建一个grade 表,master 和slave-mysql1 都删除成功

MariaDB [along]> create table grade (id int not null,name varchar(20));

澳门新濠3559 47

在slave-mysql2 上也自动生成成功

澳门新濠3559 48

 

  4.2 初始化MySQL数据库

实战三:mysql数据库双主的实现

澳门新濠3559 49

原理:双主就是双方互为主从

为了解决双主同时对一个数据库进行写入,采用自增长ID来解决,两个mysql写入用奇偶ID岔开

① 创建表,设置ID为自增长
create table userInfo (id int PRIMARY KEY AUTO_INCREMENT,name varchar(50) NOT NULL);
② 定义一个节点使用奇数id:从1开始,步长为2,
auto_increment_increment=2   #表示自增长字段每次递增的量,步长
auto_increment_offset=1          #表示自增长字段从那个数开始
③ 另一个节点使用偶数id:从2开始,步长为2,
auto_increment_increment=2
auto_increment_offset=2

应用:只适合小型公司,小并发访问量,毕竟同时写入易出错

 

$ scripts/mysql_install_db --user=mysqladmin --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

Installing MySQL system tables...2017-07-12 02:46:46 0 [Warning] 'THREAD_CONCURRENCY' is deprecated and will be removed in a future release.
2017-07-12 02:46:46 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
OK

Filling help tables...2017-07-12 02:47:40 0 [Warning] 'THREAD_CONCURRENCY' is deprecated and will be removed in a future release.
2017-07-12 02:47:40 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

  /usr/local/mysql/bin/mysqladmin -u root password 'new-password'
  /usr/local/mysql/bin/mysqladmin -u root -h ec2t-userdata-01 password 'new-password'

Alternatively you can run:

  /usr/local/mysql/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:

  cd . ; /usr/local/mysql/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl

  cd mysql-test ; perl mysql-test-run.pl

Please report any problems at http://bugs.mysql.com/

The latest information about MySQL is available on the web at

  http://www.mysql.com

Support MySQL by buying support/licenses at http://shop.mysql.com

WARNING: Found existing config file /usr/local/mysql/my.cnf on the system.
Because this file might be in use, it was not replaced,
but was used in bootstrap (unless you used --defaults-file)
and when you later start the server.
The new default config file was created as /usr/local/mysql/my-new.cnf,
please compare it with your file and take the changes you need.

WARNING: Default config file /etc/my.cnf exists on the system
This file will be read by default by the MySQL server
If you do not want to use this, either remove it, or use the
--defaults-file argument to mysqld_safe when starting the server

1、环境准备

机器名称

IP配置

服务角色

备注

mysql1

192.168.30.107

数据库

中继日志、二进制日志

mysql2

192.168.30.7

数据库

中继日志、二进制日志

  4.3 启动MySQL数据库,并为root用户设置密码,删除多余用户

2、配置总配置文件,除了ID号和起始数,两边都是一样的

vim /etc/my/cnf

server-id =1    #mysql1的配置ID为1,mysql2的ID为2
relay-log =mysql-relay-log
log-bin = mysql-bin
log_slave_updates = 1
auto_increment_increment=2   #表示自增长字段每次递增的量,步长
auto_increment_offset=1   #表示自增长字段从那个数开始,mysql1从1开始;mysql2从2开始

澳门新濠3559 50

systemctl start mariadb

 

$ /usr/local/mysql/bin/mysqld_safe &
[1] 2531
$ 170714 03:34:41 mysqld_safe Logging to '/usr/local/mysql/data/hostname.err'.
170714 03:34:41 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data

$ mysqladmin -u root password "mypna123"
$ mysql -u root -pmypna123
mysql> select user,password,host from mysql.user;
 ------ ------------------------------------------- ------------------ 
| user | password                                  | host             |
 ------ ------------------------------------------- ------------------ 
| root | *FDC33561AE905A01A945F356C99B76E1F0707B3B | localhost        |
| root |                                           | ec2t-pgtest-01   |
| root |                                           | 127.0.0.1        |
| root |                                           | ::1              |
|      |                                           | localhost        |
|      |                                           | ec2t-pgtest-01   |
 ------ ------------------------------------------- ------------------ 
6 rows in set (0.00 sec)

mysql> delete from mysql.user where user='' or password='';
Query OK, 2 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> select user,password,host from mysql.user;
 ------ ------------------------------------------- ----------- 
| user | password                                  | host      |
 ------ ------------------------------------------- ----------- 
| root | *FDC33561AE905A01A945F356C99B76E1F0707B3B | localhost |
 ------ ------------------------------------------- ----------- 
1 row in set (0.00 sec)

3、互相设为对方的从

(1)授权远程登录的用户
mysql1、2 上
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave@'192.168.%.%' IDENTIFIED BY 'along';

(2)开启复制线程
① mysql1 上
MariaDB [(none)]> change master to master_host='192.168.30.7',
    -> master_user='slave',
    -> master_password='along',
    -> master_log_file='mysql-bin.000002',
    -> master_log_pos=245;
MariaDB [(none)]>  start slave;   # 启动复制线程

② mysql2 上
MariaDB [(none)]> change master to master_host='192.168.30.107',
    -> master_user='slave',
    -> master_password='along',
    -> master_log_file='mysql-bin.000002',
    -> master_log_pos=245;
MariaDB [(none)]>  start slave;   # 启动复制线程

  4.4 安装MySQL时区

4、测试双方互为主从的关系

在mysql1上,删除test数据库;mysql2 上也自动删除

澳门新濠3559 51

在mysql2上,创建xiaohei数据库;mysql2 上也自动生成

澳门新濠3559 52

 

$ mysql -u root -pmypna123 -e "SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');"
Warning: Using a password on the command line interface can be insecure.
 ----------------------------------------------- 
| CONVERT_TZ('2004-01-01 12:00:00','GMT','MET') |
 ----------------------------------------------- 
| NULL                                          |
 ----------------------------------------------- 


$ /usr/local/mysql/bin/mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -pmypna123 mysql
Warning: Using a password on the command line interface can be insecure.
Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.

$ mysql -u root -pmypna123 -e "SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');"
Warning: Using a password on the command line interface can be insecure.
 ----------------------------------------------- 
| CONVERT_TZ('2004-01-01 12:00:00','GMT','MET') |
 ----------------------------------------------- 
| 2004-01-01 13:00:00                           |
 ----------------------------------------------- 

$ mysql -u root -pmypna123 -e "SELECT CONVERT_TZ('2004-01-01 12:00:00',' 00:00',' 10:00');"
Warning: Using a password on the command line interface can be insecure.
 ----------------------------------------------------- 
| CONVERT_TZ('2004-01-01 12:00:00',' 00:00',' 10:00') |
 ----------------------------------------------------- 
| 2004-01-01 22:00:00                                 |
 ----------------------------------------------------- 

5、设置自增长ID的表

MariaDB [along]> create table home (id int PRIMARY KEY AUTO_INCREMENT,name varchar(20));

澳门新濠3559 53

① 在mysql1上向表中插入数据

MariaDB [along]> insert into home(name) value('mayun'),('mahuateng'),('wangjianlin');

澳门新濠3559 54

② 在mysql2上向表中插入数据

MariaDB [along]> insert into home(name) value('dinglei'),('liyanhong'),('leijun');

澳门新濠3559 55

 

  4.5 设置MySQL服务相关

实验四:实现半同步复制的一主多从

  原理:介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。

注意:本来是应该最少2个从mysql,才能有真正的效果,但是原理都是一样的,我就只用了一主一从

# cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysql
# chmod  x /etc/rc.d/init.d/mysql
# chown mysqladmin:dba /etc/rc.d/init.d/mysql
# echo 'su - mysqladmin -c "/etc/init.d/mysql start --federated"' >> /etc/rc.local
# chkconfig --add mysql
# chkconfig mysql --level 2345 on

1、环境准备

机器名称

IP配置

服务角色

备注

master-mysql

192.168.30.107

主数据库

二进制日志

slave-mysql

192.168.30.7

从数据库

中继日志

 二. MySQL主从复制部署

2、按照实战一,实现主从

澳门新濠3559 56

 

1. 同步主备库时间,可在主库搭建NTP SERVER,备库作为NTP client

3、加载模块,实现半同步

(1)在主master-mysql 上:

MariaDB [(none)]> install plugin rpl_semi_sync_master soname 'semisync_master.so';  加载模块
MariaDB [(none)]> show global variables like 'rpl_semi%';  查看是否开启 
MariaDB [(none)]> set global rpl_semi_sync_master_enabled = on;   开启

澳门新濠3559 57

 

(2)在从slave-mysql 上:

MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';
set global variables rpl_semi_sync_slave_enabled = on;
为了主从同步,再重启启动下slave 两个进程
MariaDB [(none)]> stop slave;
MariaDB [(none)]> start slave;

澳门新濠3559 58

 

2. 添加hosts文件解析确保主备可以互相解析host主机名

4、查询日志,验证

cd /var/log/mariadb/

tail mariadb.log

澳门新濠3559 59

注释:

① 用于事务的半同步复制。

② 在主服务器上启用了半同步复制。

③ 启动半同步的binlog 转储到slave (id:2)上

④ 停止异步的二进制文件转储

 

3. 主库做以下操作

实验五:实现MHA 高可用mysql数据库架构

原理:总之就是当主master mysql宕机时,从slave mysql顶上去的一系列操作

① 从宕机崩溃的master 保存二进制日志事件(binlog events );

② 识别含有最新更新的slave;

③ 应用差异的中继日志(relay log) 到其他slave;

④ 应用从master 保存的二进制日志事件(binlog events);

提升一个slave 为新master;

⑥ 使用其他的slave 连接新的master

 

架构图

澳门新濠3559 60

  3.1 启用二进制日志

1、环境准备

机器名称

IP配置

服务角色

备注

master-mysql

192.168.30.107

主数据库

二进制日志、中继日志

slave-mysql1

192.168.30.7

从数据库

二进制日志、中继日志

slave-mysql2

192.168.30.2

从数据库

二进制日志、中继日志

MHA manager

192.168.30.3

MHA的管理节点

 

$ grep "log-bin" /etc/my.cnf 
log-bin=/usr/local/mysql/arch/mysql-bin

2、实现三台服务器的一主多从

注意点:

① 每个节点都需开启二进制和中继日志,因为主会宕机,当主的机器修复完毕,可以作为从继续使用,所以中继日志是必须的;从也会在主宕机的时候,顶为主,所以二进制日志也是必须的

② 各从节点必须显示启用其read-only 属性,并关闭relay_log_purge 清理中继日志的功能

③ 注意每个mysql 的server-id都不能相同

(1)vim  /etc/my.cnf  修改配置文件
① 主的配置文件
server-id=1
log-bin=mysql-bin
relay-log=mysql-relay-log
skip-name-resolve

② 从的配置文件,各个从的配置文件除了ID,其他都相同
server-id =2[/3]    #各自对应自己的id
relay-log =mysql-relay-log
log-bin = mysql-bin
read_only = on
relay_log_purge = 0
skip_name_resolve

systemctl start mariadb   启动服务

(2)在主上:授权
MariaDB [(none)]> grant replication slave,replication client on *.* to slave@'192.168.30.%' identified by 'along';

(3)在从上:开启I/O,SQL线程,实现主从
MariaDB [(none)]> change master to master_host='192.168.30.107',
master_user='slave',
master_password='along',
master_log_file='mysql-bin.000001',
master_log_pos=245;
MariaDB [(none)]> start slave ;

澳门新濠3559 61

 

  3.2 选择一个唯一的server-id

3、配置MHA的准备

(1)MHA的安装

需安装2个包 rz,我已经放到我网盘里,需要的私聊http://pan.baidu.com/s/1kV8BCJt

mha4mysql-manager-0.56-0.el6.noarch.rpm

mha4mysql-node-0.56-0.el6.noarch.rpm

所有节点,包括Manager都需安装:

yum -y localinstall mha4mysql-*

 

(2)实现各个节点都基于秘钥认证

分析:MHA 集群中的各节点彼此之间均需要基于ssh 互信通信,以实现远程控制及数据管理功能。

例:主master 机器:

ssh-keygen -t rsa    生成公私秘钥对,可以直接敲3个回车,不须加密
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.30.7:  
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.30.2:
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.30.3:   把公钥发给其他3个机器
注意:每个mysql服务器都需要发送自己的公钥

澳门新濠3559 62

 

(3)给MHA manager授权

MariaDB [(none)]> grant all on *.* to 'mhaadm'@'192.168.30.%' identified by 'along';

注意:MHA manager 需要做很多事,所以给很大的权限;且已经实现主从,所以只需在master上执行授权命令

 

(4)定义MHA 管理配置文件

mkdir /etc/mha_master 创建配置文件存放目录

vim /etc/mha_master/app.cnf 设置配置文件,注意注释不要加在配置文件中,否则检测不过

[server default]         // 适用于server1,2,3 个server 的配置
user=mhaadm            //mha 管理用户
password=along         //mha 管理密码
manager_workdir=/etc/mha_master/app         //mha_master 自己的工作路径
manager_log=/etc/mha_master/manager.log  // mha_master 自己的日志文件
remote_workdir=/mydata/mha_master/app     // 每个远程主机的工作目录在何处
ssh_user=root                 //  基于ssh 的密钥认证
repl_user=slave              // 数据库用户名
repl_password=along     // 数据库密码
ping_interval=1     // ping 间隔时长
[server1]               // 节点1
hostname=192.168.30.107   // 节点1 主机地址
ssh_port=22          // 节点1 的ssh 端口
candidate_master=1            //  将来可不可以成为master 候选节点/ 主节点
[server2]
hostname=192.168.30.7
ssh_port=22
candidate_master=1
[server3]
hostname=192.168.30.2
ssh_port=22
candidate_master=1
$ grep "server-id" /etc/my.cnf 
server-id  = 1

4、开启服务之前的检测

注意:开启服务之前的检查非常有必要,因为mha服务是管理mysql的,所有要求很严格,如果检查通不过,开启服务时会有一堆错误。每次启动服务之前都需检测环境。

① 检测各节点间ssh 互信通信配置是否Ok:

masterha_check_ssh -conf=/etc/mha_master/app.cnf

  输出信息最后一行类似如下信息,表示其通过检测。

  [info]All SSH connection tests passed successfully.

澳门新濠3559 63

② 检查管理的MySQL 复制集群的连接配置参数是否OK :

masterha_check_repl -conf=/etc/mha_master/app.cnf

  输出信息最后一行类似如下信息,表示其通过检测。

  MySQL Replication Health is OK.

 

注意:如果测试时会报错 ,可能是从节点上没有账号,因为这个架构,任何一个从节点,将有可能成为主节点,所以也需要创建账号。

因此,这里只要在mater 节点上再次执行以下操作即可:

  MariaDB [(none)]> grant all on *.* to 'mhaadm'@'192.168.30.%' identified by 'along';

  MariaDB [(none)]> FLUSH PRIVILEGES;

Manager 节点上再次运行,就显示Ok 了。

 

   3.3 创建具有复制权限的用户

5、启动MHA

(1)开启mha服务

nohup masterha_manager -conf=/etc/mha_master/app.cnf &> /etc/mha_master/manager.log &
启动成功后,可用过如下命令来查看master 节点的状态:
masterha_check_status -conf=/etc/mha_master/app.cnf

澳门新濠3559 64

app (pid:3777) is running(0:PING_OK), master:192.168.30.107

上面的信息中"app (pid:3777)is running(0:PING_OK)" 表示MHA 服务运行OK ,否则,则会显示为类似"app is stopped(1:NOT_RUNNINg)."

(2)如果要停止MHA ,需要使用master_stop 命令。

masterha_stop -conf=/etc/mha_master/app.cnf

 

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'repl';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

6、测试MHA 测试故障转移

(1) 在master 节点关闭mariadb 服务, 模拟主节点数据崩溃

killall -9 mysqld mysqld_safe

rm -rf /var/lib/mysql/*

(2) 在manager 节点查看日志:

tail -20 /etc/mha_master/manager.log 日志文件中出现如下信息,表示manager 检测到192.168.30.107节点故障,而后自动执行故障转移,将192.168.30.7 提升为主节点。

澳门新濠3559 65

注意:故障转移完成后,manager 将会自动停止,此时使用

masterha_check_status 命令检测将会遇到错误提示,如下所示:

澳门新濠3559 66

 

4. 备库做以下操作

7、提供新的从节点以修复复制集群

原有 master 节点故障后,需要重新准备好一个新的 MySQL 节点。基于来自于master 节点的备份恢复数据后,将其配置为新的 master 的从节点即可。注意,新加入的节点如果为新增节点,其 IP 地址要配置为原来 master 节点的 IP ,否则,还需要修改 app.cnf 中相应的 ip 地址。随后再次启动 manager ,并再次检测其状态。

除了增加新的mysql 节点,也可以将坏掉主mysql 修复,再将其作为从加入集群中。由于机器有限,我就用修复好的主作为从,修复复制集群。

(1)修复主mysql

yum -y remove mariadb-server

yum -y install mariadb-server

 

(2)在另两个机器上备份,在修复好的机器上恢复

① 在另外正常的机器上备份

mysqldump --all-databases > /backup/mysql-all-backup-`date %F-%T`.sql

scp /backup/mysql-all-backup-2017-11-26-14:03:19.sql @192.168.30.107:

 

② 在修复的机器上修复

mysql -uroot -p < mysql-all-backup-2017-11-26-14:03:19.sql

 

(3)把修复的机器作为新主的从

① 在新主上查询二进制日志和位置号

MariaDB [(none)]> show master status;

澳门新濠3559 67

② 在新修复的机器上,设为从,启动线程

MariaDB [(none)]> change master to master_host='192.168.30.7',
master_user='slave',
master_password='along',
master_log_file='mysql-bin.000003',
master_log_pos=245;
MariaDB [(none)]> start slave;

③ 在新主上重新授权

revoke delete on *.* from 'mhaadm'@'192.168.30.%';
revoke delete on *.* from 'slave'@'192.168.30.%';
grant replication slave,replication client on *.* to slave@'192.168.30.%' identified by 'along';
grant all on *.* to 'mhaadm'@'192.168.30.%' identified by 'along';

 

(4) 新节点提供后再次执行检查操作

masterha_check_status -conf=/etc/mha_master/app.cnf
masterha_check_repl -conf=/etc/mha_master/app.cnf
检查无误,再次运行,这次要记录日志
masterha_manager -conf=/etc/mha_master/app.cnf >/etc/mha_master/manager.log 2>&1 &

 

  4.1 启用中继日志

8、新节点上线,故障转换恢复注意事项

(1) 在生产环境中,当你的主节点挂了后,一定要在从节点上做一个备份,拿着备份文件把主节点手动提升为从节点,并指明从哪一个日志文件的位置开始复制

(2) 每一次自动完成转换后,每一次的(replication health ) 检测不ok 始终都是启动不了必须手动修复主节点,除非你改配置文件

(3) 手动修复主节点提升为从节点后,再次运行检测命令

masterha_check_repl --conf=/etc/mha_master/app.cnf

(4) 再次运行起来就恢复成功了

masterha_manager --conf=/etc/mha_master/app.cnf

 

$ grep "relay-log" /etc/my.cnf
relay-log = /usr/local/mysql/arch/relay-bin
relay-log-index  = /usr/local/mysql/arch/relay-log-index

  4.2 选择一个唯一的server-id**

$ grep "server-id" /etc/my.cnf
server-id  = 2

 4.3 创建具有复制权限的用户(可选,switchover为主库的时候需要)**

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'repl';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

** 4.4 从服务器开启二进制日志(可选,做级联复制的时候需要)


$ grep "log-bin" /etc/my.cnf
log-bin=/usr/local/mysql/arch/mysql-bin

**  4.5 从服务器更新操作记入二进制日志(可选,做级联复制的时候需要)**

$ grep "log-slave-updates" /etc/my.cnf
log-slave-updates = true

  4.6 锁定从服务器为只读(可选,安全起见,备库设为只读)

$ grep "read-only" /etc/my.cnf
read-only = 1

5. 查看主库当前binary log和postion

mysql> show master statusG
*************************** 1. row ***************************
             File: mysql-bin.000004
         Position: 397
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

6. 在从库连接主库

mysql> CHANGE MASTER TO MASTER_HOST='ec2t-pgtest-01',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=397;
Query OK, 0 rows affected, 2 warnings (0.07 sec)

mysql> show slave statusG
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: ec2t-pgtest-01
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 120
               Relay_Log_File: relay-bin.000004
                Relay_Log_Pos: 283
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 120
              Relay_Log_Space: 613
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 342fbbf4-6896-11e7-822f-0ad588ebcbcc
             Master_Info_File: /data/01/local/mysql/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
1 row in set (0.00 sec)

 

  注意:如果此时主库已经运行一段时间,并且有大量数据存在,需要使用mysqldump命令将主库导出(要指定记录导出时的二进制文件和position)。然后把导出来的数据再次导入进从服务器,此时,再去连接主服务器就需要指定从主服务器的哪个二进制文件和position开始复制数据了。而怎么知道从哪个二进制文件和position开始复制数据呢?就是从mysqldump导出数据文件中记录了导出数据时的二进制文件和position,可以试用一下命令将主库导出

$ mysqldump -u root -pmypna123 --flush-privileges --single-transaction --master-data=2 --all-databases > all_database.sql

7. 在主库查看从库信息

mysql> show slave hosts;
 ----------- ------ ------ ----------- -------------------------------------- 
| Server_id | Host | Port | Master_id | Slave_UUID                           |
 ----------- ------ ------ ----------- -------------------------------------- 
|         2 |      | 3306 |         1 | b88d1498-68f5-11e7-849e-0a0ce639fa30 |
 ----------- ------ ------ ----------- -------------------------------------- 
1 row in set (0.00 sec)

 二. MySQL主从半同步复制部署

 半同步机制

a. 当Master上开启半同步复制的功能时,至少应该有一个Slave开启其功能。此时,一个线程在Master上提交事务将受到阻塞,直到得知一个已开启半同步复制功能的Slave已收到此事务的所有事件,或等待超时。

b. 当Slave主机连接到Master时,能够查看其是否处于半同步复制的机制。

c. 当一个事务的事件都已写入其relay-log中且已刷新到磁盘上,Slave才会告知已收到。

d.  如果等待超时,也就是Master没被告知已收到,此时Master会自动转换为异步复制的机制。当至少一个半同步的Slave赶上了,Master与其Slave自动转换为半同步复制的机制。

e.  半同步复制的功能要在Master,Slave都开启,半同步复制才会起作用;否则,只开启一边,它依然为异步复制。

1. 在主库安装半同步插件

  1.1 查看主库未开启半同步时的状态

mysql> show status like '%semi%';
Empty set (0.00 sec)

mysql> show variables like '%semi%';
Empty set (0.00 sec)

mysql> show plugins;
 ---------------------------- ---------- -------------------- --------- --------- 
| Name                       | Status   | Type               | Library | License |
 ---------------------------- ---------- -------------------- --------- --------- 
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL    | GPL     |
| mysql_old_password         | ACTIVE   | AUTHENTICATION     | NULL    | GPL     |
| sha256_password            | ACTIVE   | AUTHENTICATION     | NULL    | GPL     |
| MRG_MYISAM                 | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| MyISAM                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| MEMORY                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| CSV                        | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| InnoDB                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| INNODB_TRX                 | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_LOCKS               | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_LOCK_WAITS          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP                 | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP_RESET           | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMPMEM              | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMPMEM_RESET        | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP_PER_INDEX       | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP_PER_INDEX_RESET | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_BUFFER_PAGE         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_BUFFER_PAGE_LRU     | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_BUFFER_POOL_STATS   | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_METRICS             | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_DEFAULT_STOPWORD | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_DELETED          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_BEING_DELETED    | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_CONFIG           | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_INDEX_CACHE      | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_INDEX_TABLE      | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_TABLES          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_TABLESTATS      | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_INDEXES         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_COLUMNS         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_FIELDS          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_FOREIGN         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_FOREIGN_COLS    | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_TABLESPACES     | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_DATAFILES       | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| PERFORMANCE_SCHEMA         | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| BLACKHOLE                  | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| FEDERATED                  | DISABLED | STORAGE ENGINE     | NULL    | GPL     |
| ARCHIVE                    | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| partition                  | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
 ---------------------------- ---------- -------------------- --------- --------- 

  1.2 查看主库的半同步插件

$ ls -lh /usr/local/mysql/lib/plugin/semisync_master.so 
-rwxr-x--- 1 mysqladmin dba 408K Jan 19  2015 /usr/local/mysql/lib/plugin/semisync_master.so

  1.3 安装主库的半同步插件

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.02 sec)

mysql> set global rpl_semi_sync_master_enabled = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> set global rpl_semi_sync_master_timeout = 5000;
Query OK, 0 rows affected (0.00 sec)

  安装后启动和定制主从连接错误的超时时间默认是10s可改为5s,一旦有一次超时自动降级为异步。(以上内容要想永久有效需要写到配置文件中)

$ grep rpl_semi_sync /etc/my.cnf 
rpl_semi_sync_master_enabled = 1;
rpl_semi_sync_master_timeout = 2000;

  1.4 查看主库安装好半同步插件的状态

mysql> show status like '%semi%';
 -------------------------------------------- ------- 
| Variable_name                              | Value |
 -------------------------------------------- ------- 
| Rpl_semi_sync_master_clients               | 0     |
| Rpl_semi_sync_master_net_avg_wait_time     | 0     |
| Rpl_semi_sync_master_net_wait_time         | 0     |
| Rpl_semi_sync_master_net_waits             | 0     |
| Rpl_semi_sync_master_no_times              | 0     |
| Rpl_semi_sync_master_no_tx                 | 0     |
| Rpl_semi_sync_master_status                | ON    |
| Rpl_semi_sync_master_timefunc_failures     | 0     |
| Rpl_semi_sync_master_tx_avg_wait_time      | 0     |
| Rpl_semi_sync_master_tx_wait_time          | 0     |
| Rpl_semi_sync_master_tx_waits              | 0     |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
| Rpl_semi_sync_master_wait_sessions         | 0     |
| Rpl_semi_sync_master_yes_tx                | 0     |
 -------------------------------------------- ------- 
14 rows in set (0.00 sec)

mysql> show variables like '%semi%';
 ------------------------------------ ------- 
| Variable_name                      | Value |
 ------------------------------------ ------- 
| rpl_semi_sync_master_enabled       | ON    |
| rpl_semi_sync_master_timeout       | 10000 |
| rpl_semi_sync_master_trace_level   | 32    |
| rpl_semi_sync_master_wait_no_slave | ON    |
 ------------------------------------ ------- 
4 rows in set (0.02 sec)

mysql> show plugins;
 ---------------------------- ---------- -------------------- -------------------- --------- 
| Name                       | Status   | Type               | Library            | License |
 ---------------------------- ---------- -------------------- -------------------- --------- 
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL               | GPL     |
| mysql_old_password         | ACTIVE   | AUTHENTICATION     | NULL               | GPL     |
| sha256_password            | ACTIVE   | AUTHENTICATION     | NULL               | GPL     |
| MRG_MYISAM                 | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| MyISAM                     | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| MEMORY                     | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| CSV                        | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| InnoDB                     | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| INNODB_TRX                 | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_LOCKS               | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_LOCK_WAITS          | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_CMP                 | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_CMP_RESET           | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_CMPMEM              | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_CMPMEM_RESET        | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_CMP_PER_INDEX       | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_CMP_PER_INDEX_RESET | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_BUFFER_PAGE         | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_BUFFER_PAGE_LRU     | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_BUFFER_POOL_STATS   | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_METRICS             | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_FT_DEFAULT_STOPWORD | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_FT_DELETED          | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_FT_BEING_DELETED    | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_FT_CONFIG           | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_FT_INDEX_CACHE      | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_FT_INDEX_TABLE      | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_TABLES          | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_TABLESTATS      | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_INDEXES         | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_COLUMNS         | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_FIELDS          | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_FOREIGN         | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_FOREIGN_COLS    | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_TABLESPACES     | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_DATAFILES       | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| PERFORMANCE_SCHEMA         | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| BLACKHOLE                  | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| FEDERATED                  | DISABLED | STORAGE ENGINE     | NULL               | GPL     |
| ARCHIVE                    | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| partition                  | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| rpl_semi_sync_master       | ACTIVE   | REPLICATION        | semisync_master.so | GPL     |
 ---------------------------- ---------- -------------------- -------------------- --------- 

2. 在从库安装半同步插件

  2.1 查看从库未开启半同步时的状态

mysql> show status like '%semi%';
Empty set (0.00 sec)

mysql> show variables like '%semi%';
Empty set (0.00 sec)

mysql> show plugins;
 ---------------------------- ---------- -------------------- --------- --------- 
| Name                       | Status   | Type               | Library | License |
 ---------------------------- ---------- -------------------- --------- --------- 
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL    | GPL     |
| mysql_old_password         | ACTIVE   | AUTHENTICATION     | NULL    | GPL     |
| sha256_password            | ACTIVE   | AUTHENTICATION     | NULL    | GPL     |
| MRG_MYISAM                 | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| MyISAM                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| MEMORY                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| CSV                        | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| InnoDB                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| INNODB_TRX                 | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_LOCKS               | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_LOCK_WAITS          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP                 | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP_RESET           | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMPMEM              | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMPMEM_RESET        | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP_PER_INDEX       | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP_PER_INDEX_RESET | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_BUFFER_PAGE         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_BUFFER_PAGE_LRU     | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_BUFFER_POOL_STATS   | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_METRICS             | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_DEFAULT_STOPWORD | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_DELETED          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_BEING_DELETED    | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_CONFIG           | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_INDEX_CACHE      | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_INDEX_TABLE      | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_TABLES          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_TABLESTATS      | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_INDEXES         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_COLUMNS         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_FIELDS          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_FOREIGN         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_FOREIGN_COLS    | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_TABLESPACES     | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_DATAFILES       | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| PERFORMANCE_SCHEMA         | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| BLACKHOLE                  | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| FEDERATED                  | DISABLED | STORAGE ENGINE     | NULL    | GPL     |
| ARCHIVE                    | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| partition                  | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
 ---------------------------- ---------- -------------------- --------- --------- 

  2.2 查看从库的半同步插件

$ ls -lh /usr/local/mysql/lib/plugin/semisync_slave.so
-rwxr-x--- 1 mysqladmin dba 245K Jan 19  2015 /usr/local/mysql/lib/plugin/semisync_slave.so

  2.3 安装从库的半同步插件

mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.02 sec)

mysql> set global rpl_semi_sync_slave_enabled = 1;
Query OK, 0 rows affected (0.00 sec)

  2.4 查看从库安装好半同步插件的状态**

mysql> show status like '%semi%';
 ---------------------------- ------- 
| Variable_name              | Value |
 ---------------------------- ------- 
| Rpl_semi_sync_slave_status | OFF   |
 ---------------------------- ------- 
1 row in set (0.00 sec)

mysql> show variables like '%semi%';
 --------------------------------- ------- 
| Variable_name                   | Value |
 --------------------------------- ------- 
| rpl_semi_sync_slave_enabled     | ON    |
| rpl_semi_sync_slave_trace_level | 32    |
 --------------------------------- ------- 
2 rows in set (0.02 sec)

mysql> show plugins;
 ---------------------------- ---------- -------------------- ------------------- --------- 
| Name                       | Status   | Type               | Library           | License |
 ---------------------------- ---------- -------------------- ------------------- --------- 
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL              | GPL     |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL              | GPL     |
| mysql_old_password         | ACTIVE   | AUTHENTICATION     | NULL              | GPL     |
| sha256_password            | ACTIVE   | AUTHENTICATION     | NULL              | GPL     |
| MRG_MYISAM                 | ACTIVE   | STORAGE ENGINE     | NULL              | GPL     |
| MyISAM                     | ACTIVE   | STORAGE ENGINE     | NULL              | GPL     |
| MEMORY                     | ACTIVE   | STORAGE ENGINE     | NULL              | GPL     |
| CSV                        | ACTIVE   | STORAGE ENGINE     | NULL              | GPL     |
| InnoDB                     | ACTIVE   | STORAGE ENGINE     | NULL              | GPL     |
| INNODB_TRX                 | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_LOCKS               | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_LOCK_WAITS          | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_CMP                 | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_CMP_RESET           | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_CMPMEM              | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_CMPMEM_RESET        | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_CMP_PER_INDEX       | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_CMP_PER_INDEX_RESET | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_BUFFER_PAGE         | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_BUFFER_PAGE_LRU     | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_BUFFER_POOL_STATS   | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_METRICS             | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_FT_DEFAULT_STOPWORD | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_FT_DELETED          | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_FT_BEING_DELETED    | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_FT_CONFIG           | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_FT_INDEX_CACHE      | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_FT_INDEX_TABLE      | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_SYS_TABLES          | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_SYS_TABLESTATS      | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_SYS_INDEXES         | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_SYS_COLUMNS         | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_SYS_FIELDS          | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_SYS_FOREIGN         | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_SYS_FOREIGN_COLS    | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_SYS_TABLESPACES     | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| INNODB_SYS_DATAFILES       | ACTIVE   | INFORMATION SCHEMA | NULL              | GPL     |
| PERFORMANCE_SCHEMA         | ACTIVE   | STORAGE ENGINE     | NULL              | GPL     |
| BLACKHOLE                  | ACTIVE   | STORAGE ENGINE     | NULL              | GPL     |
| FEDERATED                  | DISABLED | STORAGE ENGINE     | NULL              | GPL     |
| ARCHIVE                    | ACTIVE   | STORAGE ENGINE     | NULL              | GPL     |
| partition                  | ACTIVE   | STORAGE ENGINE     | NULL              | GPL     |
| rpl_semi_sync_slave        | ACTIVE   | REPLICATION        | semisync_slave.so | GPL     |
 ---------------------------- ---------- -------------------- ------------------- --------- 

**2.5 重启slave复制线程**

mysql> stop slave;
Query OK, 0 rows affected (0.06 sec)

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

**2.6 再次查看半同步状态


mysql> show status like '%semi%';
 ---------------------------- ------- 
| Variable_name              | Value |
 ---------------------------- ------- 
| Rpl_semi_sync_slave_status | ON    |
 ---------------------------- ------- 

2.7 将半同步配置写到配置文件

$ grep rpl_semi_sync /etc/my.cnf
rpl_semi_sync_slave_enabled=1

编辑:操作系统 本文来源:今天来说说第二技能--主从复制,一次老王一不小

关键词: 澳门新濠3559