- MySQL主版本:5.5.16-1
- MySQL Slave版本:5.5.18-1
主机的快照是通过以下方式创建的:
mysql> FLUSH TABLES WITH READ LOCK;
shell> mysqldump --all-databases --master-data > dbname_`date +%F`.sql
此转储文件已导入从站(以--skip-slave-start
option 开头),没有错误:
shell> pv dbname_`date +%F`.sql | mysql -u root -p
但是执行时出现以下错误mysql> start slave;
:
Last_SQL_Errno: 1062
Last_SQL_Error: Error 'Duplicate entry '115846' for key
'PRIMARY'' on query. Default database: 'db'. Query: 'INSERT INTO
request_posted (id, user_id, channel, message, link, picture, name, ...
主数据库上只有一条ID为115846的记录:
mysql> select count(*) from request_posted where id=115846;
Current database: db
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.01 sec)
尝试通过以下方式跳过一些查询:
mysql> STOP SLAVE;
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> START SLAVE;
没有帮助。我不想通过添加以下内容来跳过这些错误:
slave-skip-errors = 1062
进行my.cnf
归档,因为它可能导致从站不一致。
此错误的原因可能是什么?
更新
这不是我通常设置mySQL复制的方式
您认为我不遵循该文档的哪些步骤?
我想知道如果要设置整个配置而不是传递mysqldump命令是否会遇到相同的问题。
不,如果我也将母版更改为相应的坐标,则它可以正常工作。
我会尝试将数据库拖放到从属服务器上,确保二进制日志已清除,然后重新启动。还要检查主服务器上有问题的表,以确保索引没有错误。
删除(移动)所有数据目录是否足够?我做到了,得到了相同的结果。
回复@Dmytro Leonenko
从站上的'show slave status \ G'以确保已正确配置,MASTER_LOG_POS为0
在导入之后但在“启动从站”之前仅“显示从站状态\ G”;可以给我们答案
我备份了datadir,删除所有并运行mysql_install_db
,导入转储文件,执行change master to
,结果如下:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: x.x.x.x
Master_User: xx
Master_Port: 3306
Connect_Retry: 60
Master_Log_File:
Read_Master_Log_Pos: 4
Relay_Log_File: mysqld-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File:
Slave_IO_Running: No
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: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 0
Relay_Log_Space: 106
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: 0
Last_SQL_Error:
1 row in set (0.00 sec)
我想知道Master_Log_Pos为什么是4?
--master-data
选项已将二进制日志坐标写入转储文件。我只需要将master更改为master_host,master_user,master_password。
--master-data
在创建数据快照时不应该使用该选项吗?如果在使用--lock-all-tables
option和时仍然发生这种情况change master to master_log_file='', master_log_pos='', ...
,可能是什么原因?
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1
,引起错误的查询变化最少吗?从站二进制日志位置设置正确吗?