MYSQL双机热备份的配置实施(问题总结)

为了实现MYSQL数据库的冗灾、备份、恢复、负载均衡等功能,喻名堂这两天一直在学习和研究mysql的双机热备,其实MYSQL的双机热备就是使用MYSQL同步功能两种方式里面的“主-主”同步方式实现的。在一开始搜索资料进行配置时没有注意版本的问题,所以试了很多次都没有成功,后来才知道搜索的方法不对,结果搜索出来的资料都是老版本的,最后通过搜索对应的版本号再根据资料终于配置成功,现将不同版本的双机热备的配置方法进行整理并分享出来方便其他想配置MYSQL双机热备的朋友能一次成功。

要实现热备MYSQL的版本都要高于3.2,还有一个基本的原则就是作为从数据库的数据库版本可以高于主服务器数据库的版本,但是不可以低于主服务器的数据库版本,如果要实现双机热备就一定要两个数据库的版本一样,如果不知道两个数据库的版本可以用如下命令查看

1、登陆前查看

$MYSQLHOME/bin/mysql –V      //$MYSQLHOME指MYSQL的安装目录

2、登陆后查看

A、 mysql>status

B、 mysql>select version();

现在MYSQL的最新版为5.5.27,从版本5.1.7开始双机热备的方法就出现了变化,在版本5.1.7前的配置文件里面的一些可以用的参数在版本5.1.7以后已经不可以用了。现在喻名堂就根据版本5.1.7以前和版本5.1.7以后两种情况的双机热备的配置进行描述。

在对配置过程进行描述前先对实验环境做一些定义,方便后面的描述

第一台MYSQL数据库服务器的名称为:MYSQL_A,IP地址为:192.168.100.100;第二台MYSQL数据库服务器的名称为:MYSQL_B,IP地址为:192.168.100.200,两台服务器都是使用的centos5.6的操作系统,两个MYSQL的安装目录都是:/mysql,数据目录都是:/mysql/data,配置文件目录都是:/etc/my.cnf,要同步的数据库为asymt

一、版本5.1.7以前

1、设置MYSQL_A

编辑my.cnf,在[mysqld]下添加如下配置:(my.cnf里面已经存在的配置不必重复配置)

Server-id=1                           //服务id,这个应该默认是1就不用改动

log-bin=log_name                     //日志文件的名称,这里可以制定日志到别的目录 如果没有设置则默认主机名的一个日志名称

master-host=192.168.100.200   //主服务器的IP地址或者域名

master-port=3306                     //主数据库的端口号

master-user=asymt                    //同步数据库的用户

master-password=123456               //同步数据库的密码

master-connect-retry=60               //如果从服务器发现主服务器断掉,重新连接的时间差

binlog-do-db=asymt                   //记录日志的数据库

binlog-ignore-db=mysql                //不记录日志的数据库 , 这就避免了Master上的权限设置等被同步到Slave上,如果对这方面没有限制,就可以不设置这个参数。

以上的如果有多个数据库只要在下面添加就行,有多少个数据库就添加几行

然后设置同步数据库的用户帐号

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘asymt‘@‘192.168.100.200‘ IDENTIFIED BY ‘123456‘;

4.0.2以前的版本, 因为不支持REPLICATION 要使用下面的语句来实现这个功能

mysql> GRANT FILE ON *.*  TO ‘asymt‘@‘192.168.100.200‘ IDENTIFIED BY ‘123456‘;

如果想要在Slave上有权限执行 "LOAD TABLE FROM MASTER" 或 "LOAD DATA FROM MASTER" 语句的话,必须授予全局的 FILE 和 SELECT 权限:

mysql>GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO ‘asymt‘@‘192.168.100.200‘ IDENTIFIED BY ‘123456‘;

锁定现有的数据库、备份现在的数据并在MYSQL_B上恢复数据

锁定数据库

mysql> FLUSH TABLES WITH READ LOCK;

不要退出这个终端,否则这个锁就不生效了;备份数据库有两种办法一种是直接进入到mysql的data目录然后打包你需要备份数据库的文件夹,第二种是使用mysqldump的方式来备份数据库但是要加上"--master-data
"
这个参数,建议使用第一种方法来备份数据库,然后在MYSQL_B上将MYSQL_A上的备份数据解压到数据库data目录并设置好权限以及属主,然后用“unlock
tables”语句来释放锁,最后重启数据库。

2、设置MYSQL_B

同MYSQL_A一样,编辑my.cnf,在[mysqld]下添加如下配置:(my.cnf里面已经存在的配置不必重复配置)

Server-id=2                           //服务id,每个数据库应该不一样

log-bin=log_name                     //日志文件的名称,这里可以制定日志到别的目录 如果没有设置则默认主机名的一个日志名称

master-host=192.168.100.100   //主服务器的IP地址或者域名

master-port=3306                     //主数据库的端口号

master-user=asymt                    //同步数据库的用户

master-password=123456               //同步数据库的密码

master-connect-retry=60               //如果从服务器发现主服务器断掉,重新连接的时间差

binlog-do-db=asymt                   //记录日志的数据库

binlog-ignore-db=mysql                //不记录日志的数据库 , 这就避免了Master上的权限设置等被同步到Slave上,如果对这方面没有限制,就可以不设置这个参数。

以上的如果有多个数据库只要在下面添加就行,有多少个数据库就添加几行

然后设置同步数据库的用户帐号

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘asymt‘@‘192.168.100.100‘ IDENTIFIED BY ‘123456‘;

4.0.2以前的版本, 因为不支持REPLICATION 要使用下面的语句来实现这个功能

mysql> GRANT FILE ON *.*  TO ‘asymt‘@‘192.168.100.100‘ IDENTIFIED BY ‘123456‘;

如果想要在Slave上有权限执行 "LOAD TABLE FROM MASTER" 或 "LOAD DATA FROM MASTER" 语句的话,必须授予全局的 FILE 和 SELECT 权限:

mysql>GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO ‘asymt‘@‘192.168.100.100‘ IDENTIFIED BY ‘123456‘;

最后重启数据库

3、分别登陆MYSQL_A和MYSQL_B上的数据库,查看同步状态:

mysql –h localhost –u root -p

mysql>SHOW SLAVE STATUSG

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.100.100

Master_User: asymt

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: localhost-bin.000002

Read_Master_Log_Pos: 1556

Relay_Log_File: localhost-relay-bin.000004

Relay_Log_Pos: 51

Relay_Master_Log_File: localhost-bin.000002

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: cicro,cicro

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 1556

Relay_Log_Space: 51

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

1 row in set (0.00 sec)

可以看到,Slave_IO_Running 和 Slave_SQL_Running 两列的值都为 "Yes",这表明 Slave 的 I/O 和 SQL 线程都在正常运行

到此,MYSQL版本5.1.7以前的双机热备已经配置成功

二、版本5.1.7以后(以版本5.5.17为例)

同版本5.1.7以前一样,先编辑MYSQL_A和MYSQL_B上的my.cnf配置文件,加入如下参数:

Server-id=n                           //服务id,每个数据库都不一样,“n”代表ID号,在MYSQL_A上设为1,在MYSQL_B上设为2。

log-bin=log_name                     //日志文件的名称,这里可以制定日志到别的目录 如果没有设置则默认主机名的一个日志名称

binlog-do-db=asymt                   //记录日志的数据库

binlog-ignore-db=mysql                //不记录日志的数据库 , 这就避免了Master上的权限设置等被同步到Slave上,如果对这方面没有限制,就可以不设置这个参数。

设置同步数据库的用户帐号

分别重启MYSQL_A和MYSQL_B上的MYSQL数据库,然后登陆mysql,运行如下命令

MYSQL_A:

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘asymt‘@‘192.168.100.200‘ IDENTIFIED BY ‘123456‘;

如果想要在Slave上有权限执行 "LOAD TABLE FROM MASTER" 或 "LOAD DATA FROM MASTER" 语句的话,必须授予全局的 FILE 和 SELECT 权限:

mysql>GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO ‘asymt‘@‘192.168.100.200‘ IDENTIFIED BY ‘123456‘;

MYSQL_B:

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘asymt‘@‘192.168.100.100‘ IDENTIFIED BY ‘123456‘;

如果想要在Slave上有权限执行 "LOAD TABLE FROM MASTER" 或 "LOAD DATA FROM MASTER" 语句的话,必须授予全局的 FILE 和 SELECT 权限:

mysql>GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO ‘asymt‘@‘192.168.100.100‘ IDENTIFIED BY ‘123456‘;

用上文的方法先锁定数据库并备份MYSQL_A上的数据然后还原到MYSQL_B上最后把数据库的锁定释放。

分别根本法MYSQL_A和MYSQL_B上的mysql查看主服务器状态

MYSQL_A:

mysql> show master statusG;

+---------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+---------------+----------+--------------+------------------+

| mysql-bin.002 | 70 | asymt | mysql |

+---------------+----------+--------------+------------------+

MYSQL_B:

mysql> show master statusG;

+---------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+---------------+----------+--------------+------------------+

| mysql-bin.003 | 73 | asymt | mysql |

+---------------+----------+--------------+------------------+

记录File 和 Position 项目的值,以后要用的。

分别登陆上MYSQL_A和MYSQL_B的MYSQL并设置主服务器的各种参数:

MYSQL_A:

mysql> CHANGE MASTER TO

-> MASTER_HOST=‘192.168.100.200‘,     //同步数据库的IP

-> MASTER_USER=‘asymt‘,              //同步数据库的用户

-> MASTER_PASSWORD=‘123456‘,        //同步数据库的密码

-> MASTER_LOG_FILE=‘ mysql-bin.003‘,  //主服务器二进制日志的文件名(前面要求记住的参数)

-> MASTER_LOG_POS=73;             //日志文件的开始位置(前面要求记住的参数)

MYSQL_B:

mysql> CHANGE MASTER TO

-> MASTER_HOST=‘192.168.100.100‘,     //同步数据库的IP

-> MASTER_USER=‘asymt‘,              //同步数据库的用户

-> MASTER_PASSWORD=‘123456‘,        //同步数据库的密码

-> MASTER_LOG_FILE=‘ mysql-bin.002‘,  //主服务器二进制日志的文件名(前面要求记住的参数)

-> MASTER_LOG_POS=70;             //日志文件的开始位置(前面要求记住的参数)

然后分别在MYSQL_A和MYSQL_B的mysql里运行“slave start”来启动同步数据库的线程

查看主从服务器的状态

mysql> SHOW PROCESSLISTG         //可以查看mysql的进程看看是否有监听的进程

至此,版本5.5.17的双机热备配置完成

最后分别在MYSQL_A和MYSQL_B的数据库里面插入大量数据查看效果,如果在数据库插入数据时提示“xx is read
only”,请运行“$MYSQLHOME /bin/mysqladmin -u <username> -p
flush-tables”命令解决

mysql双机热备实施

1、建立mysql数据库双向热备,首先建立复制帐号,帐号名和密码为“slaveuser”,执行的sql语句如下:

GRANT REPLICATION SLAVE ON *.* TO ‘slaveuser‘ @ ‘%‘ IDENTIFIED BY ‘slaveuser‘;

#GRANT REPLICATION SLAVE ON *.* TO ‘slaveuser‘ @ ‘RedunHost‘ IDENTIFIED BY ‘slaveuser‘;

2、修改主备机的my.cnf配置文件

server-id = 1

log-bin=mysql-bin

relay-log=relay-bin

log-slave-updates

#slave-skip-errors = all(可选)

master-host     =   RedunHost

master-user     =   slaveuser

master-password =  slavepass

master-port=8004

#跨库操作配置

replicate-wild-do-table=db_name.%

如果需要同步跨库操作,需使用 –replicate-wild-do-table=db_name.% 选项

#replicate-do-db=db_name 指定要复制的数据库,本身不支持跨库更新

replicate-do-table=db_name.t_name (db_name.%) 同replicate-do-db功能类似,与replicate-do-db区别,支持跨库更新

注解:

server-id = 1

服务器ID号,整数值,保证唯一标识一台服务器就可以

log-bin=mysql-bin

打开二进制日志

relay-log=relay-bin

中继日志名称

master-host     =   RedunHost

主服务器IP地址或者主机名,比如:172.20.16.204

master-user= slaveuser

主服务器上创建的复制用户帐号名称,比如以上创建的:slaveuser

master-password=slaveuser

主服务器上创建的复制用户帐号密码,比如以上创建的:slaveuser

relay-log-index=relay-bin

中继索引文件名称

slave-skip-errors =all 是跳过错误,继续执行复制操作(可选)

log-slave-updates

log-slave-updates 这个参数一定要加上,否则不会给更新的记录些到二进制文件里

主备机执行Reset master;stop slave;reset slave;start slave;

重启主备机mysql服务,主备机执行show slave status/G,如果复制状态Slave_IO_Running,Slave_SQL_Running都为Yes,说明复制已经配置正确。

注:以上配置针对主备机数据库数据一致进行的操作,若要某些操作不记录mysql同步日志,可以用“set SQL_LOG_BIN = 0或1;”设置打开记录mysql同步日志的开关。

部署问题小结

1. mysql互为主从,但是在SLAVE执行CHANGE MASTER时,出现这个错误: ERROR 1201 (HY000): Could not initialize master!

mysql> slave stop;

mysql> reset slave;

出现这个问题的原因,应该是以前mysql做过主从

2. 启动Cobar时报错Error: JAVA_HOME environment variable is not set.

修改/etc/profile文件

export JAVA_HOME=/usr/java/jdk1.6.0_23

export JRE_HOME=/usr/java/jdk1.6.0_23/jre

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$JAVA_HOME/bin:$PATH

ldconfig

注销当前用户

3. Start Slave后使用show slave statusG;检查报错error reconnecting to master ‘[email protected]:3306‘ - retry-time: 60 retries: 86400

然后登录192.168.0.100主数据库,允许从数据库同步相关数据;

grant replication slave on *.* to [email protected] identified by ‘******‘

再次重启从数据库即可

4. /etc/my.cnf无效,MySQL启动时候不读取该文件

mysqld_safe --defaults-file=/etc/my.cnf

5. 检查rpm命令安装软件的路径

rpm -ql 套件 #列出rpm软件包的相关目录

rpm -qc 套件 #列出rpm软件包的设置文档

rpm -qd 套件 #列出rpm软件包的说明数据文件的完整路径

6. Start slave后报错ERROR 1200 (HY000): The server is not configured as slave

a) 使用命令SHOW VARIABLES LIKE ‘server_id‘检查

b) 如果server_id与my.cnf中配置id不一样,则使用SET GLOBAL server_id = 2;修改与配置中相同的值

c) 重启slave

时间: 2024-12-09 22:58:22

MYSQL双机热备份的配置实施(问题总结)的相关文章

CentOS系统MySQL双机热备配置

1  概述 在集成项目中需要应对不同环境下的安装配置,主流操作系统大致可以分为三种:Linux.Windows以及UNIX.其中Linux备受青睐的主要原因有两个: 首先,Linux作为自由软件有两个特点:一是它免费提供源码,二是爱好者可以按照自己的需要自由修改.复制和发布程序的源码,并公布在Internet上.这就吸引了世界各地的操作系统高手为Linux编写各种各样的驱动程序和应用软件,使得Linux成为一种不仅只是一个内核,而且包括系统管理工具.完整的开发环境和开发工具.应用软件在内,用户很

MySQL双机热备份

系统: CentOS release 6.6 (Final) MySQL: mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1 主从双机热备份,master <=> slave,任何一方增删改的数据都会被同步到另一方.假设A有数据库 test,ip地址为192.168.0.110,现在要将B建立起与A的双机热备份,ip地址为192.168.1.120. 1.注意事项 a.主机的mys

MySQL双机热备配置过程——任征

准备工作 1. 把需要同步的数据库实例从主数据库备份出来,然后手动导入从数据库,以保证数据库同步的时候主从数据库是一致的. 2. 配置主数据库所在操作系统的防火墙,开放数据库访问端口,默认端口3306.准备服务器 由于Mysql不同版本之间的(二进制日志)binlog格式可能会不太一样,因此最好的搭配组合是主(Master)服务器的Mysql版本和从(Slave)服务器版本相同或者更低,主服务器的版本肯定不能高于从服务器版本.设置方法: a. 范例环境: (1).操作系统: windows 7

MySQL数据库双机热备份

MySQL数据库双机热备份 1.mysql 数据库没有增量备份的机制 当数据量太大的时候备份是一个很大的问题.还好 mysql 数据库提供了一种主从备份的机制,其实就是把主数据库的所有的数据同时写到备份数据库中.实现 mysql 数据库的热备份. 2.要想实现双机的热备首先要了解主从数据库服务器的版本的需求. 要实现热备 mysql 的版本都要高于3.2,还有一个基本的原则就是作为从数据库的数据库版本可以高于主服务器数据库的版本,但是不可以低于主服务器的数据库版本. 3.设置主数据库服务器: a

学一点 MYSQL 双机异地热备份—-MYSQL主从,主主备份原理及实践

简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做的好处多. 1. 可以做灾备,其中一个坏了可以切换到另一个. 2. 可以做负载均衡,可以将请求分摊到其中任何一台上,提高网站吞吐量.  对于异地热备,尤其适合灾备.废话不多说了.我们直接进入主题. 我们会主要介绍两部分内容: 一, mysql 备份工作原理 二, 备份实战 我们开始. 我使用的是my

mysql双机热备的配置步骤

设置双机热备: 首先要在两台机器上建立同步用户: grant replication slave on *.* to 'repdcs'@'192.168.21.39' identified by '123456'; grant all privileges on *.* to 'repdcs'@'192.168.21.39  identified by '123456'; FLUSH PRIVILEGES; grant replication slave on *.* to 'repdcs'@'

学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践

双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做的好处多. 1. 可以做灾备,其中一个坏了可以切换到另一个. 2. 可以做负载均衡,可以将请求分摊到其中任何一台上,提高网站吞吐量.  对于异地热备,尤其适合灾备.废话不多说了.我们直接进入主题. 我们会主要介绍两部分内容: 一, MySQL 备份工作原理 二, 备份实战 我们开始. 我使用的是mysql 5.5.34, 一, mysql 备份工作原

MySQL建立主-从服务器双机热备配置

一.准备环境 1.主服务器A(192.168.0.176),从服务器B(192.168.0.13). 2.两台服务器上都部署了mysql数据库.(两台服务器上的数据库版本必须是一致的) 3.再两台服务器上分别创建rb-test数据库,并创建数据表user. 二.主服务器A双机热备配置步骤 1.创建同步用户 进入mysql操作界面,在主服务器A上为从服务器建立一个连接帐户,该帐户必须授予REPLICATION SLAVE权限.因为从mysql版本3.2以后就可以通过REPLICATION对其进行双

mysql双机主从方案

mysql双机主从集群架构,可以实现mysql数据库数据的安全性和高可用性.在每台mysql数据库服务器上安装一套mysql程序,数据库物理文件均在本机硬盘中,通过mysql主从复制架构,即时同步数据,如果主服务器mysql数据库宕机,另外一台备机可以通过手动切换暂时承担起全部功能,并且可以根据存活主机的数据库及时完整恢复宕机服务器的数据库,以达到高可用性的目的. 主服务器:192.168.10.91(db01) 从服务器:192.168.10.92(db02) 具体实施步骤: 一.创建并授权用