`

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年开始八怪(本名高鹏)经常向我请教一

    linux下mysql主从复制

    在本篇文章中,我们将详细介绍如何在 Linux 操作系统环境下搭建 MySQL 的单向主从复制与双向主从复制。通过这些步骤,您可以确保数据的高可用性和容灾能力。 #### 二、单向主从复制配置 ##### 1. 配置 Master 节点...

    MySQL-主从配置篇

    MySQL主从复制基于异步复制模型,即主服务器(Master)上的更改首先被写入二进制日志(Binary Log),然后从服务器(Slave)通过网络拉取这些日志并重放到自己的中继日志(Relay Log),最后由中继日志执行到从...

    MySQL Replication 主从复制全方位解决方案

    本篇文章将详细阐述MySQL主从复制的基础概念及其应用场景,并通过具体步骤指导您搭建MySQL主备机系统。 #### 二、主从复制基础概念 ##### 1.1 二进制日志(binlog)介绍 在MySQL主从复制架构中,二进制日志(binlog)...

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

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

    Mysql 5.6.26 主从搭建完整版.pdf

    在本篇文章中,我们将详细介绍基于MySQL 5.6.26版本,如何搭建主从复制模式,并解决搭建过程中可能遇到的问题。文章内容涉及环境配置、MySQL安装、配置文件修改、主从同步设置等多个方面,为读者提供一个完整搭建...

    mysql集群主从安装总结

    MySQL主从复制是一种常见的数据冗余技术,它能够帮助我们构建高可用性和高可靠性的数据库系统。通过主从复制,可以将一个MySQL服务器(主服务器)的数据自动复制到一个或多个其他MySQL服务器(从服务器)上。这样的...

    使用Spring实现读写分离(MySQL实现主从复制)

    本篇文档将详细探讨如何利用Spring框架实现数据库的读写分离,并结合MySQL的主从复制机制,确保系统的稳定运行和高效响应。 ### 背景分析 在实际应用中,许多系统面临着数据读取压力远大于写入压力的情况,这导致...

    MySQL主从复制搭建 step by step

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

    配置MySQL主从复制.doc

    ### MySQL主从复制配置详解 #### 一、MySQL主从复制概述 MySQL主从复制是一种数据复制机制,通过该...本篇文章详细介绍了MySQL主从复制的基本原理、配置流程及关键步骤,希望能够帮助读者更好地理解和应用这一技术。

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

    这是实践篇,因此本文将重点放在了实操步骤上,而关于MySQL主从复制的基本原理将在后续的文章中进行阐述。下面,将围绕Docker实现MySQL主从复制实践展开详细知识点的总结。 知识点一:Docker技术 Docker是一种轻量...

    mysql主从数据搭建问题处理

    MySQL主从复制是指在一个MySQL集群中,主服务器(Master)处理所有写操作,而从服务器(Slave)则同步主服务器上的数据变更,实现数据的一致性。这种方式可以确保在主服务器出现故障时,从服务器能够接管服务,保证...

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

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

    mysql 主从文件配置,my.cnf

    这篇文档将详细解释如何通过修改`my.cnf`来设置MySQL主从复制,以及相关的源码和工具知识。 首先,我们来了解`my.cnf`文件。这是MySQL服务器的默认配置文件,通常位于系统的/etc/my.cnf或者/etc/mysql/my.cnf路径下...

    mysql主从双机同步

    本篇文章将详细解析Linux环境下MySQL主从同步的配置过程,包括环境准备、用户权限设置、主机与从机的配置以及从机的初始化。 #### 环境准备 首先,确保两台服务器(一台作为主机,另一台作为从机)已安装相同版本的...

    MySQL主从分离读写复制配置教程[归类].pdf

    ### MySQL主从分离读写复制配置详解 #### 一、引言 在现代软件系统中,随着业务量的增长,单一数据库服务器往往难以满足高并发、大数据量的应用需求。因此,数据库读写分离技术应运而生,通过将读取操作与写入操作...

    第三版_基于Mycat的MySQL主从读写分离配置详解与示例

    在MySQL主从复制中,一个服务器(主节点)负责写操作,其他服务器(从节点)负责读操作。这样可以避免单点故障,同时提高读取效率。主节点上的所有更改都会被记录在二进制日志中,然后这些日志会被传递到从节点,从...

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

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

Global site tag (gtag.js) - Google Analytics