检查数据库发现 Slave未和主机同步,查看Slave状态:
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.9.145
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 547
Relay_Log_File: mysqltest2-relay-bin.000002
Relay_Log_Pos: 614
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1051
Last_Error: Error 'Unknown table 'test'' on query. Default database: 'test'. Query: 'drop table test'
Skip_Counter: 0
Exec_Master_Log_Pos: 469
Relay_Log_Space: 852
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: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 1051
Last_SQL_Error: Error 'Unknown table 'test'' on query. Default database: 'test'. Query: 'drop table test'
1 row in set (0.00 sec)
原因:
1.可能在slave上进行了写操作 (导致slave跟master数据不一致)
2.也可能是slave机器重起后,事务回滚造成的.
3.数据同步初始化时,未成功,就是说主库上的某些表没有初始化,删除的时候,导致slave出现'Unknown table 'test'' on query. Default database: 'test'. Query: 'drop table test'报错
===============================================================================
解决办法1:(手动同步数据)
1.首先停掉Slave服务
mysql> STOP SLAVE;
Query OK, 0 rows affected (0.00 sec)
2.到主服务器上查看主机状态:
记录File和Position对应的值。
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000009 | 3602 | | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
***********************************************************
3.初始化同步数据 (可以尝试直接跳过该步骤,执行下面的步骤,如果可以成功,则不需要执行这步。这步属于重新开始做一次slave的数据初始化了)
master:
[root@mysqltest1 mysql]# mysqldump -uroot -p123456 test > /tmp/test.sql
[root@mysqltest1 mysql]# cd /tmp
[root@mysqltest1 tmp]# ll
total 4
srwxr-xr-x 1 root root 0 Aug 15 2013 mapping-root
srwxrwxrwx 1 mysql mysql 0 Oct 30 22:34 mysql.sock
-rw-r--r-- 1 root root 2379 Nov 3 19:25 test.sql
[root@mysqltest1 tmp]# scp test.sql 192.168.9.146:/tmp/
root@192.168.9.146's password:
test.sql 100% 2379 2.3KB/s 00:00
[root@mysqltest1 tmp]#
*****
slave:
[root@mysqltest2 mysql]# cd /tmp
[root@mysqltest2 tmp]# ll
total 4
srwxr-xr-x 1 root root 0 Aug 15 2013 mapping-root
srwxrwxrwx 1 mysql mysql 0 Oct 17 21:25 mysql.sock
-rw-r--r-- 1 root root 2379 Nov 3 19:26 test.sql
[root@mysqltest2 tmp]# mysql -uroot -p123456 < test.sql
[root@mysqltest2 tmp]# mysql -uroot -p123456 test < test.sql
[root@mysqltest2 tmp]#
***********************************************************
4.到slave服务器上执行手动同步:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.9.145', MASTER_PORT=3306, MASTER_USER='replication', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000009', MASTER_LOG_POS=106;
Query OK, 0 rows affected (0.49 sec)
5.再次查看slave状态发现:
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.9.145
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 106
Relay_Log_File: mysqltest2-relay-bin.000002
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
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: 106
Relay_Log_Space: 411
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
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)
解决
===============================================================================
解决办法2:
(确保master与slave的数据时一致的,不然会出现数据不同步的情况)
mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;
===============================================================================
===============================================================================
查看日志一些命令
1,
show master status\G;
在这里主要是看log-bin的文件是否相同。
show slave status\G;
在这里主要是看:
Slave_IO_Running=Yes
Slave_SQL_Running=Yes
如果都是Yes,则说明配置成功.
2,在master上输入show processlist\G;
mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
Id: 103
User: root
Host: localhost
db: test
Command: Query
Time: 0
State: NULL
Info: SHOW PROCESSLIST
*************************** 2. row ***************************
Id: 113
User: replication
Host: 192.168.9.146:59187
db: NULL
Command: Binlog Dump
Time: 1185
State: Has sent all binlog to slave; waiting for binlog to be updated
Info: NULL
2 rows in set (0.00 sec)
出现Command: Binlog Dump,则说明配置成功.
维护管理命令:
stop slave #停止同步
start slave #开始同步,从日志终止的位置开始更新。
SET SQL_LOG_BIN=0|1 #主机端运行,需要super权限,用来开停日志,随意开停,会造成主机从机数据不一致,造成错误
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=n # 客户端运行,用来跳过几个事件,只有当同步进程出现错误而停止的时候才可以执行。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
RESET MASTER #主机端运行,清除所有的日志,这条命令就是原来的FLUSH MASTER &
RESET SLAVE #从机运行,清除日志同步位置标志,并重新生成master.info &
#虽然重新生成了master.info,但是并不起用,最好,将从机的mysql进程重启一下 &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
LOAD TABLE tblname FROM MASTER #从机运行,从主机端重读指定的表的数据,每次只能读取一个,受timeout时间限制,需要调整timeout时间。执行这个命令需要同步账号有 reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout 和 net_write_timeout的值
LOAD DATA FROM MASTER #从机执行,从主机端重新读入所有的数据。执行这个命令需要同步账号有reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout 和 net_write_timeout的值
CHANGE MASTER TO master_def_list #在线改变一些主机设置,多个用逗号间隔,比如
CHANGE MASTER TO
MASTER_HOST='master2.mycompany.com',
MASTER_USER='replication',
MASTER_PASSWORD='bigs3cret'
MASTER_POS_WAIT() #从机运行
SHOW MASTER STATUS #主机运行,看日志导出信息
SHOW SLAVE HOSTS #主机运行,看连入的从机的情况。
SHOW SLAVE STATUS (slave)
SHOW MASTER LOGS (master)
SHOW BINLOG EVENTS [ IN 'logname' ] [ FROM pos ] [ LIMIT [offset,] rows ] #PURGE [MASTER] LOGS TO 'logname' ; PURGE [MASTER] LOGS BEFORE 'date'
转载自 http://blog.itpub.net/29500582/viewspace-1318552/
转载于:https://blog.51cto.com/riverxyz/1844833