• MySQL高可用主从复制新增slave



    一 基础环境

    主机名
    系统版本
    MySQL版本
    主机IP
    master
    CentOS 6.8
    MySQL 5.6
    172.24.8.10
    slave01
    CentOS 6.8
    MySQL 5.6
    172.24.8.11
    slave02
    CentOS 6.8
    MySQL 5.6
    172.24.8.20

    二 新增slave2方案

    2.1 方案1:-复制主库

    复制主库要步骤:
    1. 将内存中的数据同步到表中;
    2. 锁定表,不让出现新数据;
    3. 备份;
    4. 解锁;
    5. 将备份传送到slave02,在slave02上同步数据;
    6. slave2上设置相应的master_log_file和master-log_pos。

    2.2 方案2:复制从库

    1. 停止从库slave01:mysql> stop slave;
    2. 看当前从库的状态,mysql> show slave status;记下 Relay_Master_Log_file 和 Exec_Master_Log_Pos;
    3. 备份从库数据
    4. 将备份传送到slave02,在slave2上同步数据;
    5. slave02上设置相应的master_log_file和master-log_pos。
    注意:此方案中master_log_file和master-log_pos也和slave中一样,指向主库。

    2.3 方案对比

    从主库复制会造成主库Master一定时间段锁表,这段时间会影响主库的使用。直接从从库进行复制,就不会对主库产生影响了。
    但是,从从库复制要保证的是复制过程中从库上的数据不会发生变化,所以要先停掉从库。

    二 新增slave2

    2.1 部署主从

    略,参考《002.MySQL高可用主从复制部署》。

    2.2 slave-02安装MySQL

    复制代码
      1 [root@Slave02 ~]# yum list installed | grep mysql	#查看是否存在其他MySQL组件
      2 [root@Slave02 ~]# yum -y remove mysql-libs.x86_64	#为避免冲突引发报错,卸载已存在的组件
      3 [root@Slave02 ~]# wget http://mirrors.ustc.edu.cn/mysql-repo/mysql-community-release-el6-5.noarch.rpm
      4 [root@Slave02 ~]# rpm -ivh mysql-community-release-el6-5.noarch.rpm
      5 [root@Slave02 ~]# yum install mysql-community-server -y
      6 [root@Slave02 ~]# chkconfig --list | grep mysqld	#查看MySQL是否加入启动项
      7 [root@Slave02 ~]# chkconfig mysqld on
    复制代码
     

    2.2 初始化MySQL

      1 [root@Master ~]# service mysqld start
      2 [root@Master ~]# mysql_secure_installation
      3 [root@Master ~]# service iptables stop
      4 [root@Master ~]# chkconfig iptables off
     
    提示:建议采用yum localinstall下载到本地进行安装。

    三 方案1形式

    3.1 锁定主库

      1 [root@Master ~]# mysql -uroot -px120952576
      2 mysql> flush tables with read lock;				#锁定主库的表
      3 mysql> show master statusG
     
    40
    File: mysql-bin.000003
    Position: 12

    3.2 备份主库

      1 [root@Master ~]# mysqldump -R -u root -p mysqltest >/tmp/mysqltest.sql
      2 Enter password:
     

    3.3 解锁主库

      1 [root@Master ~]# mysql -uroot -px120952576
      2 mysql> unlock tables;
     

    3.4 传递备份文件至slave02

      1 [root@Master ~]# scp /tmp/mysqltest.sql root@172.24.8.20:/tmp

    3.5 主库继续新建数据库

    在Master主服务器上继续创建库mysqltest02并插入相应数据:
    复制代码
      1 [root@Master ~]# mysql -uroot -p
      2 Enter password:
      3 mysql> create database mysqltest02;
      4 mysql> use mysqltest02;
      5 mysql> create table user02(id int(5),name char(10));
      6 mysql> insert into user02 values (00002,'lisi');
      7 mysql> grant replication slave on *.* to 'repl_user'@'172.24.8.%' identified by 'x12345678';
    复制代码
     
    提示:主库继续创建新库用于验证slave02是否能正常复制,同时必须注意赋权给slave02。

    3.6 备库slave02开启主从复制

    复制代码
      1 [root@Slave02 ~]# vi /etc/my.cnf
      2 [mysqld]
      3 server-id=3
      4 log-bin=mysql-bin
      5 relay_log=mysql-relay-bin
      6 log_slave_updates=1
      7 read_only=1
      8 [root@Slave02 ~]# service mysqld restart
    复制代码
     
    解释:
    server_id:服务器的标识符,唯一值,不能跟从服务器重复
    log-bin=mysql-bin:开启 binlog日志
    relay_log:开启复制日志,relay-log日志记录的是在复制过程中,从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后SQL线程会读取relay-log日志的内容并应用到从服务器。

    3.7 备库slave02恢复mysqltest

    复制代码
      1 [root@Slave02 ~]# mysql -uroot -px120952576
      2 mysql> create database mysqltest;
      3 mysql> use mysqltest;
      4 mysql> source /tmp/mysqltest.sql;
      5 mysql> select * from mysqltest.user;			#查看验证
    复制代码
     
    41

    3.8 备库slave02开启主从复制

    复制代码
      1 [root@Slave02 ~]# mysql -uroot -px120952576
      2 mysql> change master to master_host='172.24.8.10',
      3 master_user='repl_user',
      4 master_password='x12345678',
      5 master_log_file='mysql-bin.000003',
      6 master_log_pos=120;
      7 mysql> start slave;
    复制代码
     
    42
    提示:
    证常状态下,看到上面的两行加粗处,即Slave_IO_Running和Slave_SQL_Running的参数都为 Yes,就说明主从同步运行正常。

    3.9 验证数据

      1 [root@Slave ~]# mysql -uroot -px120952576
      2 [root@Slave02 ~]# mysql -uroot -px120952576
      3 mysql> select * from mysqltest02.user02;
      4 #两台slave上均验证master第二次创建的测试库是否正常复制过来。
     
    43

    四 方案2形式

    4.1 停止slave01主从复制

      1 [root@Slave ~]# mysql -uroot -px120952576
      2 mysql> stop slave;
      3 mysql> show slave statusG
     
    记录以下两项:
    Relay_Master_Log_File: mysql-bin.000003
    Exec_Master_Log_Pos: 932

    4.2 备份slave01数据库

      1 [root@Slave01 ~]# mysqldump -R -u root -p mysqltest >/tmp/mysqltest.sql
      2 Enter password:
     

    4.3 传递备份文件至slave02

      1 [root@Slave01 ~]# scp /tmp/mysqltest.sql root@172.24.8.20:/tmp

    4.4 主库继续新建数据库

    在Master主服务器上继续创建库mysqltest02并插入相应数据:
    复制代码
      1 [root@Master ~]# mysql -uroot -p
      2 Enter password:
      3 mysql> create database mysqltest02;
      4 mysql> use mysqltest02;
      5 mysql> create table user02(id int(5),name char(10));
      6 mysql> insert into user02 values (00002,'lisi');
      7 mysql> grant replication slave on *.* to 'repl_user'@'172.24.8.%' identified by 'x12345678';
    复制代码
     
    提示:主库继续创建新库用于验证slave02是否能正常复制,同时必须注意赋权给slave02。

    4.5 备库slave02开启主从复制

    参考3.6.

    4.6 备库slave02恢复mysqltest

    参考3.7.

    4.7 备库slave02开启主从复制

    复制代码
      1 [root@Slave02 ~]# mysql -uroot -px120952576
      2 mysql> change master to master_host='172.24.8.10',
      3 master_user='repl_user',
      4 master_password='x12345678',
      5 master_log_file='mysql-bin.000003',
      6 master_log_pos=932;
      7 mysql> start slave;
    复制代码
     
    提示:
    证常状态下,看到上面的两行加粗处,即Slave_IO_Running和Slave_SQL_Running的参数都为 Yes,就说明主从同步运行正常。

    4.9 验证数据

    参考3.9.
  • 相关阅读:
    LeetCode 152. 乘积最大子数组
    LeetCode 148. 排序链表
    LeetCode 143. 重排链表
    LeetCode 142. 环形链表 II
    LeetCode 137. 只出现一次的数字 II
    LeetCode 127. 单词接龙
    LeetCode 120. 三角形最小路径和
    spring boot redis 数据库缓存用法
    堪称神器的Chrome插件
    rocketMQ安装中遇到的坑
  • 原文地址:https://www.cnblogs.com/drizzle-xu/p/10276307.html
Copyright © 2020-2023  润新知