`

mysql之主从复制篇

阅读更多

http://2526575.blog.51cto.com/2516575/689199?token=BAkPV1ddW23Ssa6EnpGNjJs

 

在实际企业应用环境当中,单台mysql数据库是不足以满足日后业务需求的。譬如服务器发生故障,没有备份服务器来提供服务的话,业务就得停止。介于这种情况,我们来学习一下mysql主从复制。

使用mysql主从复制的好处有:

1、采用主从服务器这种架构,稳定性得以提升。如果主服务器发生故障,我们可以使用从服务器来提供服务。

2、在主从服务器上分开处理用户的请求,可以提升数据处理效率。

3、将主服务器上的数据复制到从服务器上,保护数据免受意外的损失。

环境描述:

新企业要搭建架构为主从复制的mysql数据库。

主服务器(mysql-master):IP地址:192.168.48.128,mysql已安装,没有用户数据。

从服务器(mysql-slave):IP地址:192.168.48.130,mysql已安装,没有用户数据。

主从服务器均可正常提供服务。

 

01

主从复制配置如下:

在主服务器上操作:

1)、确保/etc/my.cnf中有如下参数,没有的话需手工添加,并重启mysql服务。

[mysqld]

log-bin=mysql-bin 启动二进制文件

server-id=1 服务器ID

2)、登录mysql,在mysql中添加一个backup的账号,并授权给从服务器。

[root@localhost ~]# mysql -uroot –p123456 登录mysql

mysql> grant replication slave on *.* to 'backup'@'192.168.48.130' identified by 'backup'; 创建backup用户,并授权给192.168.48.130使用。

02

3)、查询主数据库状态,并记下FILE及Position的值,这个在后面配置从服务器的时候要用到。

mysql> show master status;

03

在从服务器上操作:

1)、确保/etc/my.cnf中有log-bin=mysql-bin和server-id=1参数,并把server-id=1修改为server-id=10。修改之后如下所示:

[mysqld]

log-bin=mysql-bin 启动二进制文件

server-id=10 服务器ID

2)、重启mysql服务。

[root@localhost ~]# mysqladmin -p123456 shutdown
[root@localhost ~]# mysqld_safe --user=mysql &

04

3)、登录mysql,执行如下语句

[root@localhost ~]# mysql -uroot –p123456

mysql> change master to master_host='192.168.48.128',master_user='backup',master_password='backup',master_log_file='mysql-bin.000003',master_log_pos=401;

05

4)、启动slave同步。

mysql> start slave;

06

5)、检查主从同步,如果您看到Slave_IO_Running和Slave_SQL_Running均为Yes,则主从复制连接正常。

mysql> show slave status\G

07

验证配置是否正常,mysql主从能否正常复制。

在主数据库上新建一个库,并且在库中写一个表和一些数据。

[root@localhost ~]# mysql -uroot –p123456

mysql> create database mysqltest;

mysql> use mysqltest;

mysql> create table user(id int(5),name char(10));

mysql> insert into user values (00001,'zhangsan');

08

在从数据库中验证一下,是否正常复制到数据。

[root@localhost ~]# mysql -uroot –p123456

mysql> show databases;

09

 

mysql> select * from mysqltest.user;

 

10

从上图中的结果,我们可以看到mysql主从复制已经在起作用了,我们在主数据库中写入的数据已经复制到我们的从数据库中了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

环境如下:

单台数据库存有数据,要升级为主从复制的架构。

主数据库:mysql-master:IP192.168.48.128,数据库正常提供服务,有数据。

从数据库:mysql-slave:IP192.168.48.130,数据库正常提供服务,无数据。

01

升级大致步骤如下:

1、修改主数据库配置文件,开启总从复制必要的功能。

2、在主数据库中创建一个账号并授权给从数据库使用。

3、导出主数据库中的数据作。

4、修改从数据库配置文件,开启总从复制必要的功能。

5、把刚才主数据库中导出的数据导入到从数据库。

6、在从数据库中配置连接主数据库要用到的账户、密码等。

7、启动主从复制功能,并检查是否正常复制。

开始升级:

在主数据库上操作:

1)、确保/etc/my.cnf中有如下参数,没有的话需手工添加,并重启mysql服务。

[mysqld]

log-bin=mysql-bin 启动二进制文件

server-id=1 服务器ID

2)、登录mysql,在mysql中添加一个backup的账号,并授权给从服务器。

[root@localhost ~]# mysql -uroot –p123456 登录mysql

mysql> grant replication slave on *.* to 'backup'@'192.168.48.130' identified by 'backup'; 创建backup用户,并授权给192.168.48.130使用。

02

3)、查看已有的数据库有哪些;

mysql> show databases;

02-1

4)、进行锁表操作,不让数据进行写入动作,这么做事为了防止从数据库的原始数据和主数据库的原始数据不一致。

mysql> flush tables with read lock;

03

5)、查询主数据库状态,并记下FILE及Position的值,这个在后面配置从服务器的时候要用到。

mysql> show master status;

04

6)、切换一个终端,使用mysqldump命令将刚才查询到的两个库导出来。

mysql> mysqldump –uroot –p123456 mysqltest > mysqltest.sql

mysql> mysqldump –uroot –p123456 test1234 > test1234.sql

05

7)、将导出来的库文件传送到从数据库的/root目录下。

[root@localhost ~]#scp mysqltest.sql test1234.sql root@192.168.48.130:/root/

这中间需要输入一次验证口令。见下图

06

8)、切换回之前的终端,进行表解锁操作。

mysql> unlock tables;

07

主数据库服务器上的操作告一段落。

在从数据库上操作:

1)、确保/etc/my.cnf中有log-bin=mysql-bin和server-id=1参数,并把server-id=1修改为server-id=10。修改之后如下所示:

[mysqld]

log-bin=mysql-bin 启动二进制文件

server-id=10 服务器ID

2)、重启mysql服务。

[root@localhost ~]# mysqladmin -p123456 shutdown
[root@localhost ~]# mysqld_safe --user=mysql &

08

3)、登录数据库,确认要同步的库名不存在。

[root@localhost ~]# mysql -uroot –p123456

mysql> show databases;

 

09

4)、创建名为mysqltest和test1234的库。

mysql> create database mysqltest;

mysql> create database test1234;

10

4)、切换一个终端,将传过来的两个数据文件分别导入对应的数据库下。

[root@localhost ~]# mysql -uroot –p123456 mysqltest < mysqltest.sql

[root@localhost ~]# mysql -uroot –p123456 test1234 &lt; test1234.sql

11

5)、切换回之前的终端,执行如下语句

mysql> change master to master_host='192.168.48.128',master_user='backup',master_password='backup',master_log_file='mysql-bin.000003',master_log_pos=1650;

 

5)、切换回之前的终端,执行如下语句

mysql> change master to master_host='192.168.48.128',master_user='backup',master_password='backup',master_log_file='mysql-bin.000003',master_log_pos=1650;

 

6)、启动主从复制功能。

mysql> start slave;

13

7)、

检查主从同步,如果您看到Slave_IO_Running和Slave_SQL_Running均为Yes,则主从复制连接正常。

mysql> show slave status\G

14

验证主从是否正常配置:

在主数据库上插入数据:

mysql> show databases;

mysql> show tables;

mysql> use mysqltest;

mysql> select * from user;

mysql> insert into user values (4,'ergou');

mysql> insert into user values (5,'sanwazi');

16

在从数据库上查看是否正常同步:

mysql> show databases;

mysql> use mysqltest;

mysql> select * from user;

17

上图可以看出,主从之间已经可以正常复制了。

今天就先到这里吧O(∩_∩)O~

 

mysql主从复制碰到的小问题

一个朋友在做mysql主从复制的时候碰到了一些问题,他已经按照我之前的教程一步步做了。但是就是不知道是怎么回事。从数据库中使用命令show slave status\G查看到的结果如下图:

000

 

我们知道,要想mysql主从复制成功的先决条件是Slave_IO_Running和Slave_SQL_Running均为Yes,而上图所示的结果显然是有一个不满足条件。

再根据Last_IO_Error的错误代码2013及下面的错误提示我们可以知道,从数据库无法正常连接到主数据库。

这里原因有三:

1、主数据库没有给从数据库登录授权

2、网络不通

3、有防火墙

明白这三点之后我们就可以针对原因依次来解决它们:

登录主数据库,给从数据库授权

[root@localhost ~]# mysql -uroot –p123456 登录主数据库

mysql> grant replication slave on *.* to 'backup'@'192.168.48.130' identified by 'backup'; 创建backup用户,并授权给从数据库连接使用。

02

检查网络是否通畅

[root@localhost ~]# ping -c 4 192.168.48.128 再从服务器上ping主服务器。

QQ截图20111013104639

分别在主从服务器上检查防火墙状态

我们可以直接关闭防火墙

运行命令:[root@localhost ~]# setup

111111111111

选择防火墙(Firewall configuretion)这一项.

001

将它Disabled掉。

002

或者你可以直接使用命令:

[root@localhost ~]# service iptables stop 即时生效,系统重启后失效

[root@localhost ~]# chkconfig iptables off 当前状态无效,系统重启后生效

大家可以结合使用

222222222

以上情况都排除完毕,我们来再测试一下主从是否能正常连接。

在从数据库中执行如下命令:

mysql>stop slave;

mysql>start slave;

000-1

然后查看主从连接状态

mysql>show slave status\G

07

经过上述操作,我那位朋友成功排除了主从不能复制的故障。

故障2:报错如下:

@MF2K}FVZ7%Y9QEQ_E$2INQ

意思就是从上的server_id和主的一样的,经查看发现从上的/etc/my.cnf中的server_id=1这行我没有注释掉(在下面复制部分我设置了server_id),于是马上把这行注释掉了,然后重启mysql,发现还是报同样的错误。

使用如下命令查看了一下server_id

show variables like 'server_id';

发现,mysql并没有从my.cnf文件中更新server_id,既然这样就只能手动修改了

mysql> set global server_id=10; #此处的数值和my.cnf里设置的一样就行
mysql> slave start;

如此执行后,slave恢复了正常。

不过稍后蚊子使用/etc/init.d/mysqld restart重启了mysql服务,然后查看slave状态,发现又出现了上面的错误,然后查看server_id发现这个数值又恢复到了1。

之后蚊子又重新查看了一下/etc/my.cnf的内容,确认应该不是这个文件的问题,于是去google查了一下,看到mysql在启动的时候会查找/etc/my.cnf、DATADIR/my.cnf,USER_HOME/my.cnf。

分享到:
评论

相关推荐

    《深入理解MySQL主从原理32讲》推荐篇

    导读: 作者:高鹏(网名八怪),《深入理解...八怪写作风格很是严谨,几乎每篇都是从源码入手去剖析MySQL主从复制相关的知识点。 强烈推荐大家订阅本专栏 业界大咖推荐序 从2016年开始八怪(本名高鹏)经常向我请教一

    MySQL主从复制-主库已有数据的解决方案.docx

    MySQL 主从复制主库已有数据的解决方案 在 MySQL 主从复制中,主库可能已经运行了一段时间,并且已经有了数据,这种情况在实际业务中很常见。这时,如何应对开启主从复制前主库有数据的场景?本文将介绍两种解决...

    MySQL主从复制搭建 step by step

    这篇搭建文档包括了MySQL的安装,主从配置,主从切换测试,集群的搭建,故障转移测试(自动手动切换),常用命令,基本概念,是一个全方面的文档,是我搭建过程中整理的文档,一些内容是来自互联网的,但是按照这篇...

    详解Docker方式实现MySql 主从复制(实践篇)

    关于MySql主从复制的原理将在下一篇中进行讲解。 一些数据的本地存储目录结构 mysql &gt;tree -L 2 . ├── data │ ├── master01 │ └── slave01 ├── master01 │ └── master01.cnf └── slave01 └...

    MySQL5.7.18主从复制搭建(一主一从)教程详解

    MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上。这篇文章主要介绍了MySQL5.7.18主从复制搭建(一主一从)教程详解,需要的朋友可以参考下

    深入mysql主从复制延迟问题的详解

    本篇文章是对mysql中主从复制延迟的问题进行了详细的分析介绍,需要的朋友参考下

    shell监控脚本实例—监控mysql主从复制

    本节内容:监控mysql主从复制的shell脚本。 说明:监控脚本在 rhel5 下测试正常,其它版本的linux 系统请自行测试,需要的一些准备工作可以查看这篇文章 代码: 代码如下:#监控mysql 主从复制cat chk_mysql_rep.sh ...

    Mysql主从复制注意事项的讲解

    今天小编就为大家分享一篇关于Mysql主从复制注意事项的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    详解MySQL主从复制实战 - 基于GTID的复制

    本篇文章主要介绍了MySQL主从复制实战 - 基于GTID的复制,基于GTID的复制是MySQL 5.6后新增的复制方式.有兴趣的可以了解一下。

    MYSQL的主从复制知识点整理

    在本篇文章里小编给大家整理的是一篇关于MYSQL主从复制的相关知识点内容,有需要的朋友们参考学习下。

    详解MySQL的主从复制、读写分离、备份恢复

    本篇文章主要对MySQL的主从复制、读写分离、备份恢复进行详细全面的讲解,具有很好的参考价值,需要的朋友一起来看下吧

    mysql主从配置.docx

    MySQL主从复制,是否还在为主从怎么配面烦恼?看完此篇文档可以轻松学会主从的配置,仅仅是配置,希望能帮到你,skr~

    mysql如何在线修改主从复制选项

    MySQL最常用的架构就是主从复制了,其实主从复制有很多选项,特别是在从库端,我们可以设置复制过滤,比如说忽略某张表或某个库。这些过滤选项都是可以在线修改而不用重启的。原来对这块了解不多,最近看了下相关...

    MySQL学习篇 — 基于GTID主从复制入门

    MySQL主从复制入门 确定主库与从库的关系(尽量保持主从库版本一致) 在主库创建备份所需的user create user ‘repl’ @’%’ identified by ‘123456’ (创建一个用户,要给予你备库可以访问的地址权限) 在主库...

    MySQL入门到精通-运维篇

    MySQL 运维篇涵盖了 MySQL 的日志、主从复制、分库分表、读写分离等多方面的运维知识点。 日志 MySQL 中的日志是非常重要的,日志记录了 MySQL 服务器的各种操作记录,包括错误日志、二进制日志、查询日志、慢...

    centos7下mysql5.6的主从复制详解

    本篇文章主要介绍了centos7下mysql5.6的主从复制详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    DBA MySQL数据库工程师(2021版)视频教程

    第8章 主从复制基础 第9章 主从复制高级进阶 第10章 MyCAT中间件实战 第11章 MySQL优化 第12章 MySQL附录篇 第13章 NoSQL-MongoDB 第14章 NoSQL-ElasticSearch 第15章 NoSQL-Redis 第16章 服务监控 第17章 Amoeba...

    MySQL简单主从方案及暴露的问题

    大致的讨论思路是从最简的MySQL主从方案开始介绍,通过这种方案的不足延伸出更复杂的集群方案,并介绍后者是如何针对这些不足进行改进的。MySQL的集群技术方案特别多,这几篇文章会选择一些典型的集群方案向读者进行...

    MySQL5.6基于GTID的主从复制

    MySQL 5.6 的新特性之一,是加入了全局事务 ID (GTID) 来强化数据库的主备一致性,故障恢复,以及容错能力。 什么是GTID? 官方文档:http://dev.mysql.com/doc/refman/5.6/en/replication-gtids.html在这篇文档里,...

Global site tag (gtag.js) - Google Analytics