快速,持续,稳定,傻瓜式
支持Mysql,Sqlserver数据同步

【mysql同步备份】

请联系QQ:1793040 索取软件

注释:MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护日志文件的一个索引以跟踪日志循环。服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知下一次更新。在实际项目中,两台分布于异地的主机上安装有MySQL数据库,两台服务器互为主备,客户要求当其中一台机器出现故障时,另外一台能够接管服务器上的应用,这就需要两台数据库的数据要实时保持一致,在这里使用MySQL的同步功能实现双机的同步复制。
以下是操作实例:

一、环境配置

1、主数据服务端:CentOS release 5.6 mysql-5.0.77-4.el5_5.4 IP:192.168.4.200

2、从数据客户端:CentOS release 5.69 mysql-server-5.0.95-5.el5_9 IP:192.168.4.244

二、在主、从数据库增加同步账号

1、在主库增加一个从库可以登录的账号

MySQL>
GRANT all privileges ON *.* TO
tongbu@’192.168.4.244′IDENTIFIED BY ‘123456’;
(注意:tongbu是用于同步的帐号,123456是tongbu的密码)

2、在从库增加一个主库可以登录的账号

MySQL>
GRANT all privileges ON *.* TO
tongbu@’192.168.4.200′IDENTIFIED BY ‘123456’;
(注意:tongbu是用于同步的帐号,123456是tongbu的密码)

三、配置数据库参数

1、以root用户登录主库,修改主库my.cnf文件;

[root@jw01 mysql]#vim/etc/my.cnf

[mysqld]下面增加以下的参数;

default-character-set=utf8
log-bin=MySQL-bin
relay-log=relay-bin
relay-log-index=relay-bin-index
server-id=1
master-host=192.168.4.244#同步服务器的IP
master-user=tongbu #用于同步的帐号
master-password=123456#用于同步帐号的密码
master-port=3306 #同步服务器的端口
master-connect-retry=30#同步的时间间隔,单位是秒
binlog-do-db=zhubao #需要同步的库,zhubao、HyDatabase、zentao、collect;
binlog-do-db=HyDatabase
binlog-do-db=zentao
binlog-do-db=collect
replicate-do-db=zhubao
replicate-do-db=HyDatabase
replicate-do-db=zentao
replicate-do-db=collect

2、以root用户登录从库,修改从库my.cnf文件;

[root@jw02 mysql]#vim/etc/my.cnf

[mysqld]下面增加以下的参数;

default-character-set=utf8
log-bin=MySQL-bin
relay-log=relay-bin
relay-log-index=relay-bin-index
server-id=2
master-host=192.168.4.200
master-user=tongbu
master-password=123456
master-port=3306
master-connect-retry=30
binlog-do-db=zhubao
binlog-do-db=HyDatabase
binlog-do-db=zentao
binlog-do-db=collect
replicate-do-db=zhubao
replicate-do-db=HyDatabase

replicate-do-db=zentao
replicate-do-db=collect

slave-net-timeout=60 #当slave从主数据库读取log数据失败
slave-skip-errors=all#忽略错误的参数

3、手工执行数据库同步;

在从库重启mysql

[root@jw02 mysql]#service mysqld restart
停止 mysqld:[确定]
启动 mysqld:[确定]

4、在从库上用root账户登录Mysql,执行;

MySQL>stop slave;
MySQL>load data from master;
MySQL>start slave;

5、在主库重启Mysql;

[root@jw01 mysql]#service mysqld restart
停止 mysqld:[确定]
启动 mysqld:[确定]

6、查看数据库同步的状态;将显示同步进程的状态,如下所示,红色字体为slave进程状态,如果都为YES表示正常;如果有问题会有错误提示,为NO:

mysql>show slave status\G;
*************************** 1.row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host:192.168.4.200
Master_User:tongbu
Master_Port:3306
Connect_Retry:30
Master_Log_File:MySQL-bin.000014
Read_Master_Log_Pos:98
Relay_Log_File: relay-bin.000052
Relay_Log_Pos: 235
Relay_Master_Log_File: MySQL-bin.000014
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: zhubao,HyDatabase,zentao,collect
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: 98
Relay_Log_Space: 235
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.01 sec)

7、测试数据库同步;

将主库现有的数据手工同步到从库,我利用Navicat工具同步的元数据;

在主库192.168.4.200下Collect库下增加了一个表名为:kk_test;

查看是否已同步;有kk_test证明已经同步成功~~

mysql>use collect;
Database changed
mysql>show tables;
+———————–+
| Tables_in_collect |
+———————–+
| fw_collect_item |
| fw_collect_purpose |
| fw_collect_site |
| fw_collect_site_cate |
| fw_collect_site_city |
|kk_test |
+———————-+
6 rows in set (0.00 sec)

四、主、从库同步出现问题如下:

1、查看发现Slave_IO_Running的状态是No;当slave从主数据库读取log数据失败后,等待多久重新建立连接并获取数据,在My.cnf配置文件中增加该参数,设置为60秒;

slave-net-timeout=60

重启Mysql数据库后在测试;

2、数据库同步失效的解决

当数据同步进程失效后,首先手工检查slave主机当前备份的数据库日志文件在master主机上是否存在,在slave主机上运行;

mysql>show slave status\G;

在master上检查当前的数据库列表;

mysql>show master logs;
+——————+———–+
| Log_name | File_size |
+——————+———–+
| MySQL-bin.000001 | 117 |
| MySQL-bin.000002 | 117 |
| MySQL-bin.000003 | 117 |
| MySQL-bin.000004 | 117 |
| MySQL-bin.000005 | 117 |
| MySQL-bin.000006 | 117 |
| MySQL-bin.000007 | 117 |
| MySQL-bin.000008 | 117 |
| MySQL-bin.000009 | 117 |
| MySQL-bin.000010 | 117 |
| MySQL-bin.000011 | 117 |
| MySQL-bin.000012 | 826 |
| MySQL-bin.000013 | 7062 |
| MySQL-bin.000014 | 13900 |
+——————+———–+
14 rows in set (0.00 sec)

如果slave主机上使用的的Master_Log_File对应的文件在master的日志列表中存在,在slave主机上开启从属服务器线程后可以自动同步:

MySQL>start slave;

如果master主机上的日志文件已经不存在,则需要首先从master主机上恢复全部数据,再开启同步机制。

在slave主机上运行:

MySQL>stop slave;

在master主机上运行:

MySQL>stop slave;

在slave主机上运行:

MySQL>load data from master;
MySQL>reset master;
MySQL>start slave;

在master主机上运行:

MySQL>reset slave;
MySQL>start slave;

注意:LOAD DATA FROM MASTER目前只在所有表使用MyISAM存储引擎的数据库上有效。

3、Slave_SQL_Running: No

进入slave服务器,运行:

mysql>show slave status\G

…….
Relay_Log_File: localhost-relay-bin.000535
Relay_Log_Pos: 21795072
Relay_Master_Log_File: localhost-bin.000094
Slave_IO_Running: Yes
Slave_SQL_Running: No#故障1
Replicate_Do_DB:
Replicate_Ignore_DB:

Last_Errno: 1050
Last_Error: Error ‘Table ‘diy_conf_part_dimension_meta’ already exists’ on query.Default database: ‘zhubao’.Query: ‘create table diy_conf_part_dimension_meta
(
conf_part_dimension_meta_id smallint(6) not null,
conf_part_dimension_id smallint(6) not null comment ‘diy_conf_part_dimension.conf_part_dimension_id
‘,

primary key (conf_part_dimension_meta_id) #故障2
)’
……

故障1:解决办法一
Slave_SQL_Running: No
1.程序可能在slave上进行了写操作
2.也可能是slave机器重起后,事务回滚造成的.

一般是事务回滚造成的:
解决办法:


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



解决办法二
首先停掉Slave服务:slave stop
到主服务器上查看主机状态:记录File和Position对应的值
进入master


mysql>show master logs;
+——————+———–+
| Log_name | File_size |
+——————+———–+
| MySQL-bin.000001 | 117 |
| MySQL-bin.000002 | 117 |
| MySQL-bin.000003 | 117 |
| MySQL-bin.000004 | 117 |
| MySQL-bin.000005 | 117 |
| MySQL-bin.000006 | 117 |
| MySQL-bin.000007 | 117 |
| MySQL-bin.000008 | 117 |
| MySQL-bin.000009 | 117 |
| MySQL-bin.000010 | 117 |
| MySQL-bin.000011 | 117 |
| MySQL-bin.000012 | 826 |
| MySQL-bin.000013 | 7062 |
| MySQL-bin.000014 | 13900 |
+——————+———–+
14 rows in set (0.00 sec)



然后到slave服务器上执行手动同步:

mysql>change master to master_host=’192.168.4.200′,master_user=’tongbu’,
master_password=’123456′,master_log_file=’MySQL-bin.0000014′,master_log_pos=139000;

1 row in set (0.00 sec)

mysql>show slave status\G;
*************************** 1.row ***************************
……..
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.4.200
Master_User: tongbu
Master_Port: 3306
Connect_Retry: 30
Master_Log_File: MySQL-bin.000014
Read_Master_Log_Pos: 13900
Relay_Log_File: relay-bin.000173
Relay_Log_Pos: 235
Relay_Master_Log_File: MySQL-bin.000014
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: zhubao,HyDatabase,zentao,collect
……….


手动同步需要停止master的写操作!

故障2:寻找参数设定忽略错误

mysql>show variables like “%slave%”;
+—————————+——-+
| Variable_name | Value |
+—————————+——-+
| init_slave | |
| log_slave_updates | OFF |
| slave_compressed_protocol | OFF |
| slave_load_tmpdir |/tmp/|
| slave_net_timeout | 60 |
| slave_skip_errors |OFF |
| slave_transaction_retries | 10 |
+—————————+——-+
7 rows in set (0.00 sec)

在/etc/My.cnf 配置文件增加忽略错误的参数

slave-skip-errors=all

重新启动Mysqld服务;

在查看一下:


mysql>show variables like “%slave%”;
+—————————+——-+
| Variable_name | Value |
+—————————+——-+
| init_slave | |
| log_slave_updates | OFF |
| slave_compressed_protocol | OFF |
| slave_load_tmpdir |/tmp/|
| slave_net_timeout | 60 |
|slave_skip_errors | ALL|
| slave_transaction_retries | 10 |
+—————————+——-+
7 rows in set (0.00 sec)



4、”Slave_IO_Running: No”MYSQL不同步;
show slave status\G;查看同步状态如下:
Slave_IO_Running: No
Slave_SQL_Running: Yes

先stop slave 再reset slave再start slave就正常了。



本文转自 kuangling 51CTO博客,原文链接:http://blog.51cto.com/kling/1132562


相关推荐

咨询软件
 
QQ在线咨询
售前咨询热线
QQ1793040