一.mysql主从备份(复制)的基本原理
mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
二.mysql主从备份配置方法
在进行mysql主从备份时,最好确保主从服务器的版本兼容。从服务器至少与主服务器版本相同或更高。
1.修改主机配置
在[mysqld]标签下添加以下几行
log-bin #开启二进制日志 server-id=1 #主服务器id号,随意设定,一般为1 #binlog-do-db=db_nameA #指定对db_nameA记录二进制日志 #binlog-ignore-db=db_namB #指定不对db_namB记录二进制日志 general_log=on #开启sql语句记录,非必须 general_log_file = D:/mysql-log-query.log #指定保存位置,非必须
注意:
log-bin,server-id是配置文件中必须添加的内容。此时主服务器默认对所有数据库进行备份。如果需要特殊指明只对某个数据库进行备份或不备份,则可以加入binlog-do-db和binlog-ignore-db选项。修改后重启mysql服务。登录数据库输入:
show global variables like‘%log%‘;
查看gerneral_log和long_bin是否为ON,以及general_log_file储存位置。再输入:
show master status;
记住出现的 File 和 Position 对应值,配置从机会用到。
2.为从服务器添加mysql账户并配置权限
在主服务器上,必须为从服务器创建一个用来连接主服务器的用户,建议新建一个用户,并设置replication slave权限。所用具体命令如下:
create user forslave identified by ‘forslave‘; #用户名密码自己决定 grant replication slave on *.* to ‘forslave‘@‘%‘ identified by ‘forslave‘; flush privileges; #刷新权限 select * from user where user=‘forslave‘\G; #查看权限
注意 Repl_slava_priv 是否为 Y。
3.从机(slave)配置
1.修改mysql配置文件my.cnf
在[mysqld]标签下添加以下面一行:
server-id=2 #从服务器id号,须大于之前设置的主服务器ID。 general_log=on #开启sql语句记录,非必须 general_log_file = D:/mysql-log-query.log #指定保存位置,非必须
然后重启从机mysql数据库,用root用户登录数据库,输入:
change master to master_host = ‘10.52.10.75‘, #主机IP地址 master_user = ‘forslave‘, #之前配置的用户及密码 master_password = ‘forslave‘, master_log_file = ‘mysql-bin.000011‘, #master status中的 File 对应文件 master_log_pos = 327; #master status中 Position对应值
检查数据库查看相关参数,输入:
show slave status \G;
此处只截取部分,注意其中
Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上参数说听slave正常运行,正等待主服务器发来的消息。
还需要注意的两个参数是:
Master_Log_File和Read_Master_Log_Pos。Master_Log_File代表主机上用于主备同步的日志文件名,Read_Master_Log_Pos代表上一次成功同步到的日志文件中的位置。
如果这两项与先前在主服务器上看到的File及Position的值不相符,则无法正确进行同步。
4.测试主从复制
至此主从服务器配置已经完成,可在主机上对数据库进行操作,从机上数据库也会有相应的变化。
同时,可在general_log_file中查看执行的SQL语句。
5.注意
在进行主从设置之前尽量保证主从数据库中的数据完全一致。若不一致,在主机上操作从机上没有的数据则在 slave_status 中会出现类似下列错误:
......
Slave_IO_Running: Yes
Slave_SQL_Running: No
......
Last_Errno: 1091
Last_Error: Error ‘Can‘t drop database ‘test‘; database doesn‘t exist‘ on query. Default database: ‘test‘. Query: ‘drop database test‘ #因所操作的内容而异
......
Last_SQL_Error: Error ‘Can‘t drop database ‘test‘; database doesn‘t exist‘ on query. Default database: ‘test‘. Query: ‘drop database test‘ #因所操作的内容而异
......
此时可在从机的数据库内做如下操作:
stop slave; #先停止服务 set global sql_slave_skip_counter=1; #跳过1个错误event,若存在多次错误可将1做修改 start slave; #重新启动服务 show slave status\G; #再次查看状态,是否恢复正常,若还存在类似错误,继续执行上述操作
原文地址:http://10829612.blog.51cto.com/10819612/1737557