一.MySql复制环境:
原理: MySql复制是指将主数据库的ddl和dml语言操作通过二进制日志传到复制服务器上,然后在复制服务器上将这些日志文件重做,从而使得从服务器和主服务器的数据保持同步!
目的:方便不停止数据库而备份主服务器,实现主从服务器数据同步!
现有两台机器A、B需要实施MySql的主从热备份,A作为主服务器,B作为从服务器
环境:Windows Server 2003、MySql5.5
A、B的操作系统一样,MySql版本均为5.5
A主服务器ip:192.168.1.2
B从服务器ip:192.168.1.3
二.MySql复制的优点:
1.如果主服务器上出现了问题可以切换到从服务器上
2.可以在从服务器上执行查询操作,降低主服务器的访问压力
3.可以在从服务器上进行备份,以避免备份期间影响主服务器的服务
三.MySql复制操作步骤:
1、主服务器授权
授权从服务器(192.168.1.3)可以连接主服务器(192.168.1.2)并进行更新。也就是在A服务器上添加一个MySql账号让B服务器(从)可以通过 这个账号连接A服务器(主)的MySql并进行相关更新操作。
MySql> grant replication slave on *.* to 'slave'@'192.168.1.3' identified by '123456';
slave --- MySql用户名
192.168.1.3 --- 从服务器ip
123456 --- MySql密码
注意:如果有多台丛机,就执行多次,只需更换从服务器的ip.
2、数据复制
建立好访问许可之后,接下来是从主服务器向从服务器复制数据。
有多种方法,我说最笨的一种,先mysqldump导出主机A的数据test为 test.sql,然后在从机B上建立数据库test,mysql导入 test.sql到test库中
3、配置主服务器(A 服务器)
修改MySql 的配置文件my.ini,ubuntu下是(/etc/mysql/my.cnf)
找到server-id,给主服务器的server-id 指定一个值(注意:主服务器和从服务器的server-id的值不能相同)。另外还要在主服务器启动二进制日志,即在选项配置文件中添加log-bin启动选项。配置示例如下:
[MySqld]
# 主机标识,整数值(唯一),并不能与从服务器的值相同
server-id=1
#日志文件以mysql-bin 为前缀
log-bin = /var/log/mysql/mysql-bin.log
#主机,读写都可以
read-only =0
#不需要备份的数据库,多个写多行(可选属性)
binlog-ignore-db=Mysql
#需要备份数据,多个写多行(可选属性)
binlog-do-db=test
注:这几个参数一定要放在[Mysqld]结点下,都是小写,如果大写,服务会启动不了,错误日志会有如下提示:
111012 16:52:24 InnoDB: 1.1.8 started; log sequence number 1595675
111012 16:52:24 [ERROR] C:Program FilesMySQLMySQL Server 5.5binmysqld: unknown variable 'Server-id=1'
111012 16:52:24 [ERROR] Aborting
配置好之后重启MySql服务器,在重启之后清空二进制日志(reset master 命令)
修改从服务器的MySql配置文件my.ini文件。
[MySqld]
#唯一,并与主服务器上的server-id 不同。
server-id=2
#主服务器的主机名或者ip地址
master-host=192.168.1.2
#如果主服务器没有在默认的端口上监听,则需确定master-port选项的值
master-port=3306
#主服务器中创建的用户名和密码
master-user=slave
master-password=123456
#复制操作要针对的数据库(可选,默认为全部)
replicate-do-db=test
#不复制某个库
replicate-ignore-db=mysql
#如果主副服务器间连接经常失败,需增加master-retry-count 和master-connect-retry
#master-retry-count 连接重试的次数
#master-connect-retry 连接失败后等待的秒数
master-retry-count = 999
master-connect-retry = 60
注:Mysql版本从5.1.7以后开始就不支持“master-host”类似的参数;所以照上面的配置方法会启动不了MySql服务, 错误日志会有如下提示: http://bolg.rekfan.com
111012 17:15:23 InnoDB: 1.1.8 started; log sequence number 1595675
111012 17:15:23 [ERROR] C:Program FilesMySQLMySQL Server 5.5binmysqld: unknown variable 'master-connect-retry=60'
111012 17:15:23 [ERROR] Aborting
排除些没有用的参数后,成如下的结构:
[mysqld]
server-id=2
replicate-do-db = test
启动从服务器Mysql数据库,执行如下命令:
MySql> slave stop;
MySql> change master to master_host='192.168.1.2', master_user='slave', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=0;
MySql> slave start;
MySql> show slave status G ;
如果发现
Slave_IO_Running: NO
Slave_SQL_Running: Yes
查看错误日志:
C:/Program Files/MySQL/MySQL Server 5.5/data/xxxxxx.err
会发现如下错误:
111012 17:19:23 [ERROR] Error reading packet from server: Could not find first log file name in binary log index file ( server_errno=1236)
111012 17:19:24 [ERROR] Got fatal error 1236: 'Could not find first log file name in binary log index file' from master when reading data from binary log
一般出现这个错误是因为
一是权限问题
二是文件路径不多,或文件名不一样,Mysql对大小写很敏感,执行change master to master_host='192.168.1.2', master_user='test', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=0;语句的时候,master_log_file的mysql-bin前缀一定要与主服务器的log-bin配置的相同! http://bolg.rekfan.com
Master.info 文件
在日志目录下有个master.info 文件,其中包含所有有关复制过程的信息(连接主服务器的相关信息及与主服务器交换数据的相关信息)。在初次启动以后,从服务器将检查这个master.info 文件,以得到相关信息。如果想修改复制选项,删除master.info 并重启MySql服务,在启动过程中使用选项配置文件中的新选项进行重新创建了master.info 文件。
5、管理服务器过程
5.1、管理主服务器
显示数据库服务器上有关线程的信息,命令如下:
mysql> show processlist;
显示二进制日志信息,命令如下:
mysql> show binlog events;
显示主服务器二进制其他信息,命令如下:
mysql> show master status;
5.2、管理副服务器
在上面步骤4中配置好副服务器后需要重启MySql服务,进入MySql命令行用于开始复制,执行如下命令:
mysql> start slave;
查看服务器的状态信息,命令如下:
mysql> show slave statys G;
其中Slave_IO_Running 对应的值为YES,
Slave_SQL_Running 对应的值为YES
6、查看数据同步情况
主服务器(A 服务器)的表中添加数据,看看副服务器(B 服务器)有没有同步数据
如果看到B 服务器也有数据了,即实现了数据的同步