mysql主从备份

by 清泉 17. 三月 2010 16:02

一、准备服务器
由于MySQL不同版本之间的(二进制日志)binlog格式可能会不一样,因此最好的搭配组合是Master的MySQL版本和Slave的版本相同或者更低,Master的版本肯定不能高于Slave版本。
我们假设主服务器(以下简称Master)和从服务器(以下简称Slave)的版本都是5.0.63。
假设同步Master的主机名为:A(IP:192.168.0.1),Slave主机名为:B(IP:192.168.0.2),2个MySQL的basedir目录都是/usr/local/mysql,datadir都是:/var/mysql。

二、设置同步服务器
1、设置同步Master
修改 my.cnf 文件,在
# Replication Master Server (default)
# binary logging is required for replication
添加如下内容:
 
log-bin=mysql-bin  
server-id = 1 
binlog-do-db=test  
binlog-ignore-db=mysql 

log-bin=mysql-bin
server-id = 1
binlog-do-db=test
binlog-ignore-db=mysql

重启MySQL,创建一个MySQL帐号为同步专用

Sql代码
GRANT REPLICATION SLAVE,RELOAD,SUPER, ON *.* TO backup@192.168.0.2 IDENTIFIED BY 'slavepass';  
FLUSH PRIVILEGES ; 

GRANT REPLICATION SLAVE,RELOAD,SUPER, ON *.* TO backup@192.168.0.2 IDENTIFIED BY 'slavepass';
FLUSH PRIVILEGES ;

复制数据库:
Sql代码
FLUSH TABLES WITH READ LOCK; 

FLUSH TABLES WITH READ LOCK;
锁定表清除写入操作。
Sql代码
SHOW MASTER STATUS; 

SHOW MASTER STATUS;
File列显示日志名,而Position显示偏移量,记录备用。
备份数据库,建议对于MYI存储的MYSQL采用直接文件复制,效率会好很多。备份完解锁。
Sql代码
UNLOCK TABLES; 

UNLOCK TABLES;

备份后对于从服务器导入数据库

以上复制过程也可以用mysqldump,如果数据库在提供服务,必须加入--lock-all-tables以保证数据为同一时间的。加入--master-data=1在dump时会记录binlog名称和偏移值,以CHANGE MASTER TO形式存在文件中,这样导入slave后不用自己设置master的binlog文件和偏移值了。

2、设置同步Slave

修改my.cnf文件,添加
 
server-id = 2 
master-host = 192.168.0.1 
master-user = backup  
master-password = slavepass  
master-port = 3306 
 
replicate-ignore-db=mysql  
replicate-do-db=test 

server-id = 2
master-host = 192.168.0.1
master-user = backup
master-password = slavepass
master-port = 3306

replicate-ignore-db=mysql
replicate-do-db=test

server-id不能与master相同

重启MySQL

3、启动同步

在主服务器A MySQL命令符下:
Sql代码
show master status; 

show master status;
显示(当然这个是我机器的情况,你的不可能跟我一样哈,只是个例子):
+------------------+----------+-------------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+-------------------+------------------+
| mysql-bin.000028 | 313361 | test | mysql |
+------------------+----------+-------------------+------------------+

在从服务器B MySQL命令符下:
Sql代码
slave stop;  
MySQL> CHANGE MASTER TO 
-> MASTER_HOST='master_host_name',  
-> MASTER_USER='replication_user_name',  
-> MASTER_PASSWORD='replication_password',  
-> MASTER_LOG_FILE='recorded_log_file_name',  
-> MASTER_LOG_POS=recorded_log_position;  
slave start; 

slave stop;
MySQL> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
slave start;

用show slave status;看一下从服务器的同步情况
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果都是yes,那代表已经在同步

往表里面写点数据测试一下看是否同步成功,如果不成功,绝对不是你的RP问题,再检查一下操作步骤!


4、设置双向同步


其实也就是A->B单向同步的反向操作!双向同步,就这么简单啦!

三、同步错误处理

发现mysql slave服务器经常因为一些特殊字符或者符号产生的更新语句报错,整个同步也会因此而卡在那,最初的办法只是手动去出错的机器,执行下面三条sql语句,跳过错误即可。

Sql代码
slave stop;  
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;  
slave start; 

slave stop;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
slave start;

四、备份底层知识

1、binlog
mysql的binlog记录了数据库的所有操作,比如我有个新的数据库bbs,建立数据库时候也开启了binlog,那么mysql会在var目录生成个mysql-bin.000001,这个文件记录了对数据库bbs的所有操作sql命令。每个binlog文件默认1G,超过了会自动换到mysql-bin.000002。mysql-bin.index记录了所有mysql-bin的名字。

mysql-bin.index示例:
 
./mysql-bin.000001 
./mysql-bin.000002 
./mysql-bin.000003 
./mysql-bin.000004 
./mysql-bin.000005 
./mysql-bin.000006 
./mysql-bin.000007 
./mysql-bin.000008 
./mysql-bin.000009 
./mysql-bin.000010 

./mysql-bin.000001
./mysql-bin.000002
./mysql-bin.000003
./mysql-bin.000004
./mysql-bin.000005
./mysql-bin.000006
./mysql-bin.000007
./mysql-bin.000008
./mysql-bin.000009
./mysql-bin.000010

数据主从备份其实就是master把binlog发给slave,然后slave在本地执行这些sql语句。

2、master.info
master.info文件存在于slave的var目录,记录了master的信息。
master.info示例:
 
15 
mysql-bin.000105  #master的binlog文件  
498027148         #偏移值  
192.168.0.1 
backup  
slavepass  
3306 
60 

 
 
 
 
 

15
mysql-bin.000105  #master的binlog文件
498027148         #偏移值
192.168.0.1
backup
slavepass
3306
60
0

 

 

0

3、relay-log.info
relay-log.info文件存在于slave的var目录,记录了slave执行binlog文件情况的信息。
relay-log.info示例:
 
./lab-relay-bin.000050     #slave存放master的binlog的文件  
210263408                               #slave偏移值  
mysql-bin.000105 
498027148 

./lab-relay-bin.000050     #slave存放master的binlog的文件
210263408                               #slave偏移值
mysql-bin.000105
498027148
2

从master的mysql-bin.000105发送信息写到lab-relay-bin.000050里,slave再从lab-relay-bin.000050取sql语句执行。

Tags:

数据库相关

添加评论



(将显示你的Gravatar头像)  

biuquote
微笑得意调皮害羞酷大笑惊讶发呆喜欢可怜尴尬闭嘴噘嘴皱眉伤心抓狂呕吐坏笑漫骂发怒
Loading



Supidea.com 晨飞的梦 @ All Rights Reserved. Powered by BlogYi.NET ver:1.8.0.0. 苏ICP备09011404号

关于博主

kamau
抱着美好的理想背井离乡,这酸甜苦辣只能默默忍受。既然选择了路,就得风雨兼程……

Calendar

<<  五月 2012  >>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

在日历中查看文章

最近的评论

Comment RSS

声明

      本博所发一切破解相关附件只作学习研究交流之用,严禁用于商业用途,请在下载24小时内删除。
      本博所有网友评论不代表本博立场,版权归其作者所有。

© Copyright 2009