mysql 架构篇系列 2 复制架构一主一从搭建(异步复制)
一. 环境准备
1.1 主库环境(172.168.18.201)
|
环境 |
说明 |
查看脚本 |
|
操作系统版本 |
CentOS Linux release 7.4.1708 (Core) |
cat /etc/redhat-release |
|
操作系统用户名和密码 |
root js*2015 |
|
|
IP地址 |
172.168.18.201 |
ip addr |
|
网关Gateway |
172.168.18.1 |
cat /etc/sysconfig/network-scripts |
|
DNS |
172.168.16.11 |
|
|
mysql 版本 |
Distrib 5.7.23 |
mysql --help | grep Distrib 或者 select version(); |
|
mysql 用户名和密码 |
root 123456 |
|
|
mysql 端口 |
3306 |
grep mysql /etc/services 或者 HOW GLOBAL VARIABLES LIKE 'port' |
1.2 从库环境(172.168.18.203)
|
环境 |
说明 |
|
操作系统版本 |
CentOS Linux release 7.4.1708 (Core) |
|
操作系统用户名和密码 |
root js*2015 |
|
IP地址 |
172.168.18.203 |
|
网关Gateway |
172.168.18.1 |
|
DNS |
172.168.16.11 |
|
mysql 版本 |
Distrib 5.7.20 |
|
mysql 用户名和密码 |
root js*2015% (后面主库数据还原到从库后,密码跟主库的一样“123456”) |
|
Mysql 端口 |
3306 |
1.3 主库是用二进制安装,从库是用RPM安装,下面是查看的不同命令,脚本如下所示:
-- 主库启动mysql服务
service mysql start
-- 主库连接到mysql命令
mysql -uroot -p123456
-- 主库查看mysql是否启动
service mysql status -- 从库启动 mysql服务
systemctl start mysqld
-- 从库连接到mysql命令
mysql -uroot -p js*2015%
-- 从库查看mysql是否启动
systemctl status mysqld
1.4 其它
(1) 主从服务器相互接通对方ip。 例如在主库上拼: ping 172.168.18.203。
(2) 使用telnet 拼通对方mysql端口。例如在从库上拼: telnet 172.168.18.201 3306
二. 异步复制搭建(主库)
主从复制配置步骤比较简单,下面详细介绍,确保主从库上安装了相同版本的数据库,因为复制的功能在持续的改进中。这里一个是5.7.23,一个是5.7.20。二个相近的版本(最好是一个版本)。
2.1 在主库上,设置一个复制使用的mysql账户,并授予replication slave 权限,创建主库复制用户rep1。(注意:需要把 'rep1'@'172.168.18.201' 改成 'rep1'@'%' 在文章最后,测试复制是否成功会讲到)
-- 172.168.18.201 主库 创建rep1 用户
GRANT REPLICATION SLAVE ON *.* TO 'rep1'@'172.168.18.201' IDENTIFIED BY ''
2.2 在主库上修改服务器配置文件my.cnf, 开启binlog, 并设置server-id的值,之后重启数据库服务生效。开启binlog日志,详细说明在:mysql 开发进阶篇系列 33 工具篇(mysqlbinlog日志管理工具) 中讲到,在my.cnf配置如下:
[mysqld]
server-id=1
log-bin=/var/lib/mysql/mysql-bin
2.3 在主库上,设置读锁定,这个操作为了确保没有数据库操作,以便获得一个一致性的快照。
-- 锁住当前主库, 其它会话增删改等修改操作将会阻塞
FLUSH TABLES WITH READ LOCK;
2.4 得到主库当前的二进制日志名和偏移量值,这个操作是为了在从库上启动以后,从这个点开始进行数据的恢复
SHOW MASTER STATUS

2.5 现在主数据库已经停止更新操作了,需要生成主数据库的备份,备份可以直接在操作系统下复制全部的数据到从库服务器上,也可以通过mysqldump或xtrabackup 工具进行数据库备份。下面使用xtrabackup来克隆到slave。下面在主库上进行备份。
-- 先删除以前历史备份
[root@hsr base]# rm -rf /data/backups/base
-- 完整备份
[root@hsr base]# xtrabackup --host=127.0.0.1 --user bkpuser --password=123456 --backup --target-dir=/data/backups/base

2.6 备份结束后,恢复主库写操作
UNLOCK TABLES;
2.7 将备份文件复制到从库上
可以使用rsync命令来实现文件拷贝,我这里简单起见使用xtfp来传送文件。同样在从库上也建相同的目录,主库数据文件拷贝到从库目录后,如下图所示

三. 异步复制搭建(从库)
3.1 数据还原,使主库和从库的数据库和表保持一致,从库是一个相同的副本
在从库上安装好xtrabackup工具,配置好mysql备份用户,脚本如下,可参照:mysql 开发进阶篇系列 45 物理备份与恢复(xtrabackup 安装,用户权限,配置)
(1) -- 从库 203配置mysql备份用户脚本如下
CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY '';
GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';
GRANT PROCESS,SUPER ON *.* TO 'bkpuser'@'localhost'; (2) -- 数据还原到从库,从库data目录是 /var/lib/mysql,按下面脚本顺序操作
-- 停掉从库服务
[root@xuegod64 mysql]# systemctl stop mysqld
-- 将mysql文件重命名为mysqlbak文件(备份)
[root@xuegod64 mysql]# mv /var/lib/mysql /var/lib/mysqlbak
-- 数据还原到从库
[root@xuegod64 lib]# xtrabackup --defaults-file=/etc/my.cnf --host=127.0.0.1 --user bkpuser --password=12345678 --copy-back
--target-dir=/data/backups/base
此时数据已还原,如下图所示 :

(3)-- 下面将mysql文件的属主从root改为mysql
[root@xuegod64 lib]# chown -R mysql.mysql /var/lib/mysql
[root@xuegod64 lib]# chmod 770 /var/lib/mysql
3.2 配置从库 my.cnf
修改从库配置文件,增加server-id 参数,注意server-id的值必须唯一,不能和主数据库的配置相同,如果有多个从服务器,每个从服务器必须有唯一的server-id值。
[mysqld]
server-id=2
3.3 在从库上,使用skip-slave-start选项启动从数据库,这样不会立即启动从库的复制进程,目的方便下一步配置
[mysqld]
server-id=2
skip-slave-start=true
-- 启动服务
[root@xuegod64 lib]# systemctl start mysqld
3.4 对从库做相应的配置,指定复制使用的用户,主数据库服务器ip, 端口,以及开始执行复制的日志文件和位置等,脚本如下:
CHANGE MASTER TO
MASTER_HOST='172.168.18.201',
MASTER_PORT=3306,
MASTER_USER='rep1',
MASTER_PASSWORD='',
MASTER_LOG_FILE='mysql-bin.000070',
MASTER_LOG_POS=785
3.5 从库上启动slave线程
START SLAVE
3.6 查看是否配置正确(从库上)
SHOW PROCESSLIST
如下图所示:表明slave已经连接上master, 并开始接受并执行日志。

四. 验证测试复制
4.1 测试复制服务的正确性。 下面在主数据库上执行一个更新操作,观察是否在从库上同步。
-- 在主库上更新数据
SELECT * FROM testbackup WHERE id=12
UPDATE testbackup SET `name`='小李子' WHERE id=12
4.2 查看从库testbackup表
-- 数据没有更新过来,检查从库复制线程状态
SHOW SLAVE STATUS
错误提示:在last_io_error中出现: error connecting to master 'rep1@172.168.18.201:3306' - retry-time: 60 retries: 10
4.3 测试从库203上连接主库201,结果连接失败
[root@xuegod64 lib]# mysql -urep1 -h 172.168.18.201 -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'rep1'@'aca812cb.ipt.aol.com' (using password: YES)
--解决方法:在主库将rep1的host 值从172.168.18.201改为 %
UPDATE mysql.user SET `Host`='%' WHERE `User`='rep1'
FLUSH PRIVILEGES
-- 再测试从库203上连接主库201, 结果连接成功
[root@xuegod64 lib]# mysql -urep1 -h 172.168.18.201 -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 180
-- 从库203上停止,再重启slave线程。
STOP SLAVE
START SLAVE
最终在从库203查看数据是否已经同步, 结果已同步

mysql 架构篇系列 2 复制架构一主一从搭建(异步复制)的更多相关文章
- mysql 架构篇系列 4 复制架构一主一从搭建(半同步复制)
一.概述 在mysql 5.5之前,mysql 的复制是异步操作,主库和从库的数据之间存在一定的延时,这样存在一个隐患:当主库上写入一个事务并提交成功,而从库尚未得到主库推送的Binlog日志时,主库 ...
- 【目录】mysql 架构篇系列
随笔分类 - mysql 架构篇系列 mysql 架构篇系列 4 复制架构一主一从搭建(半同步复制) 摘要: 一.概述 在mysql 5.5之前,mysql 的复制是异步操作,主库和从库的数据之间存在 ...
- 【目录】sql server 架构篇系列
随笔分类 - sql server 架构篇系列 sql server 高可用镜像 摘要: 一.什么是数据库镜像 基本软件的高可用性解决方案 快速的故障转移恢复(3秒转移),低硬件成本 基于数据库级别的 ...
- MySQL优化篇系列文章(二)——MyISAM表锁与InnoDB锁问题
我可以和面试官多聊几句吗?只是想... MySQL优化篇系列文章(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. 面试官:咦,小伙子,又来啦 ...
- 【目录】mysql 进阶篇系列
随笔分类 - mysql 进阶篇系列 mysql 开发进阶篇系列 55 权限与安全(安全事项 ) 摘要: 一. 操作系统层面安全 对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysq ...
- 【目录】mysql 基础篇系列
随笔分类 - mysql 基础篇系列 mysql 开发基础系列22 SQL Model(带迁移事项) 摘要: 一.概述 与其它数据库不同,mysql 可以运行不同的sql model 下, sql m ...
- 1018关于MySQL复制搭建[异步复制和半同步复制]
转自:http://www.cnblogs.com/ivictor/p/5735580.html 搭建MySQL数据库的主从架构,还是蛮简单的.重要的几个命令整理一下. 主从服务器上: SHOW VA ...
- mysql 架构篇系列 3 复制运行状态监控与选项参数说明
一. 概述 在上一篇中,搭建了一主一从的复制架构,这篇通过一些诊断方法来了解复制的运行状态和一些选项参数说明.上次mysql主从服务关机,今天在打开mysql服务,出现了错误信息. 1.首先 启动主从 ...
- mysql 架构篇系列 1 复制原理和复制架构
一. 复制概述 mysql 从3.23版本开始提供复制功能,复制是指将主数据库的ddl和dml操作通过二进制日志传到复制服务器(也叫从服务器)上,然后在从服务器上对这些日志重新执行(也叫重做),从而使 ...
随机推荐
- vs2015 不能启动 iis express
删除以下目录的文件 <<path_to_solution_folder>>\.vs\config\applicationhost.config具体地址http://stacko ...
- Django 中文和时区设置
Django 语言和时区的设置都在 settings.py 文件中. 中文设置 LANGUAGE_CODE:设置语言,英语 en-us,中文简体 zh-Hans,中文繁体 zh-Hant 在 MIDD ...
- canvas简易画板。
在学canvas的时候,想到可以做一个自己用来画画的简易画板,加上canvas的基础都已经学完,便尝试做了一个画板.如图 1.获取标签. var c=document.getElementById(' ...
- Desktop Central 的移动设备管理功能
Desktop Central 的移动设备管理功能1.移动应用程序管理设备管理不会仅仅只是配置策略.检索资产信息和保护设备.应用程序管理与设置员工的移动设备一样重要.使用 Desktop Centre ...
- O365 Manager Plus帮助台委派功能一览表
O365 Manager Plus帮助台委派介绍 虽然Office 365允许您在全球任何地方工作,但它提供的管理功能十分不足.当一个组织分布在多个国家/地区时,一个管理员很难单独管理所有用户和邮箱. ...
- lsf运行lsload命令显示“lsload: Host does not have a software license”
因为这个问题也是花费好长时间了,对一个小白的我来说真的挺激动的.下面说一下我的解决思路吧.不过造成这个问题也有很多种原因,需要对症下药. 我入手解决是从这个网站上看到同样的问题,然后通过一个个排除最后 ...
- ES6 generators in depth 一(译)
今天在学习redux-saga时,外部链接推荐了这篇文章ES6 generators in depth,所以翻译的同时也可以加深一下对Generator的理解. 这里对原文一些只能在高版本现代浏览器使 ...
- python视频地址和链接
算法 链接:http://pan.baidu.com/s/1nvHmcZJ 密码:fwjg常用库 链接:http://pan.baidu.com/s/1o8uPvPg 密码:yp3w进阶-高级代码 链 ...
- Apache启动不成功时,用命令行检测(新手)
1,在配置Apache服务器时,经常要在httpd.conf 修改和添加一些代码,编写中,误写或者写错时,无法正常启动时,直接报错The requested operation has failed! ...
- angular-repeat
ng-repeat="name in 变量名字 track by $index" 一个数组的时候ng-repeat="name in 变量名字" {{x.nam ...