前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >003.MySQL高可用主从复制新增slave

003.MySQL高可用主从复制新增slave

作者头像
木二
发布2019-07-01 14:10:13
3570
发布2019-07-01 14:10:13
举报
文章被收录于专栏:木二天空木二天空

一 基础环境

主机名

系统版本

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

代码语言:javascript
复制
  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

代码语言:javascript
复制
  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 锁定主库

代码语言:javascript
复制
  1 [root@Master ~]# mysql -uroot -px120952576
  2 mysql> flush tables with read lock;				#锁定主库的表
  3 mysql> show master status\G
40
40

File: mysql-bin.000003

Position: 12

3.2 备份主库

代码语言:javascript
复制
  1 [root@Master ~]# mysqldump -R -u root -p mysqltest >/tmp/mysqltest.sql
  2 Enter password:

3.3 解锁主库

代码语言:javascript
复制
  1 [root@Master ~]# mysql -uroot -px120952576
  2 mysql> unlock tables;

3.4 传递备份文件至slave02

代码语言:javascript
复制
  1 [root@Master ~]# scp /tmp/mysqltest.sql root@172.24.8.20:/tmp

3.5 主库继续新建数据库

在Master主服务器上继续创建库mysqltest02并插入相应数据:

代码语言:javascript
复制
  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开启主从复制

代码语言:javascript
复制
  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

代码语言:javascript
复制
  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
41

3.8 备库slave02开启主从复制

代码语言:javascript
复制
  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
42

提示:

证常状态下,看到上面的两行加粗处,即Slave_IO_Running和Slave_SQL_Running的参数都为 Yes,就说明主从同步运行正常。

3.9 验证数据

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

四 方案2形式

4.1 停止slave01主从复制

代码语言:javascript
复制
  1 [root@Slave ~]# mysql -uroot -px120952576
  2 mysql> stop slave;
  3 mysql> show slave status\G

记录以下两项:

Relay_Master_Log_File: mysql-bin.000003

Exec_Master_Log_Pos: 932

4.2 备份slave01数据库

代码语言:javascript
复制
  1 [root@Slave01 ~]# mysqldump -R -u root -p mysqltest >/tmp/mysqltest.sql
  2 Enter password:

4.3 传递备份文件至slave02

代码语言:javascript
复制
  1 [root@Slave01 ~]# scp /tmp/mysqltest.sql root@172.24.8.20:/tmp

4.4 主库继续新建数据库

在Master主服务器上继续创建库mysqltest02并插入相应数据:

代码语言:javascript
复制
  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开启主从复制

代码语言:javascript
复制
  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.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-01-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 基础环境
  • 二 新增slave2方案
    • 2.1 方案1:-复制主库
      • 2.2 方案2:复制从库
        • 2.3 方案对比
        • 二 新增slave2
          • 2.1 部署主从
            • 2.2 slave-02安装MySQL
              • 2.2 初始化MySQL
              • 三 方案1形式
                • 3.1 锁定主库
                  • 3.2 备份主库
                    • 3.3 解锁主库
                      • 3.4 传递备份文件至slave02
                        • 3.5 主库继续新建数据库
                          • 3.6 备库slave02开启主从复制
                            • 3.7 备库slave02恢复mysqltest
                              • 3.8 备库slave02开启主从复制
                                • 3.9 验证数据
                                • 四 方案2形式
                                  • 4.1 停止slave01主从复制
                                    • 4.2 备份slave01数据库
                                      • 4.3 传递备份文件至slave02
                                        • 4.4 主库继续新建数据库
                                          • 4.5 备库slave02开启主从复制
                                            • 4.6 备库slave02恢复mysqltest
                                              • 4.7 备库slave02开启主从复制
                                                • 4.9 验证数据
                                                相关产品与服务
                                                云数据库 SQL Server
                                                腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                                                领券
                                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档