您好,欢迎访问一九零五行业门户网

mysql主从备份_MySQL

bitscn.com
一、准备服务器
由于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 
添加如下内容: 
java代码  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 ;
复制数据库: 
sql代码  flush tables with read lock;  
锁定表清除写入操作。 
sql代码  show master status;  
file列显示日志名,而position显示偏移量,记录备用。 
备份数据库,建议对于myi存储的mysql采用直接文件复制,效率会好很多。备份完解锁。 
sql代码  unlock tables;
备份后对于从服务器导入数据库
以上复制过程也可以用mysqldump,如果数据库在提供服务,必须加入--lock-all-tables以保证数据为同一时间的。加入--master-data=1在dump时会记录binlog名称和偏移值,以change master to形式存在文件中,这样导入slave后不用自己设置master的binlog文件和偏移值了。
2、设置同步slave
修改my.cnf文件,添加 
java代码  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;  
显示(当然这个是我机器的情况,你的不可能跟我一样哈,只是个例子): 
+------------------+----------+-------------------+------------------+ 
| 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;
用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;
四、备份底层知识
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示例: 
java代码  ./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示例: 
java代码  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示例: 
java代码  ./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语句执行。
bitscn.com
其它类似信息

推荐信息