我有两台服务器 A 和 BI 尝试在两台服务器之间为固定数据库 DBA 和 DBB 设置复制,但它不起作用我的配置表没有更新为什么?
Master:(/etc/my.cnf)
server-id=4233865
log-bin=mysqld-bin
log-error=mysql-bin.err
relay-log=mysqld-relay-bin
Slave:(/etc/my.cnf)
symbolic-links=0
server-id=1359390567
relay-log-index = slave-relay-bin.index
relay-log = slave-relay-bin
replicate-do-db=DBA,DBB
显示从站状态
Slave_IO_State Waiting for master to send event
Master_Host 10.0.0.163
Master_User repl
Master_Port 3306
Connect_Retry 60
Master_Log_File mysqld-bin.000007
Read_Master_Log_Pos 770800
Relay_Log_File slave-relay-bin.000017
Relay_Log_Pos 770947
Relay_Master_Log_File mysqld-bin.000007
Slave_IO_Running Yes
Slave_SQL_Running Yes
Replicate_Do_DB DBA,DBB
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 770800
Relay_Log_Space 1134838
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
大师状态
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000007 | 608837 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
我可以使用我在主服务器中创建的复制用户从从服务器登录。对于我给的用户REPLICATION_SLAVE on % PERMISSIONS
。
我错过了什么吗?No Error in Logs
更新
进程 ID 用户 主机 数据库 命令 时间 状态 SQL 查询
(Kill) (2) (系统用户) (无) (连接) (149410) (等待主机发送事件) (---)
Kill 1 系统用户 None Connect -38185 Slave 已读取所有中继日志;等待从属I/O线程更新它---
正如你所看到的,SQL 查询总是 --- 为什么?
答案1
出于调试目的,我将在从站上使用具有完全权限的用户。成功复制后,我会尝试重置复制用户权限。
我看到的主要问题是从站期望主站位于 的日志位置770800
,但主站的实际位置是608837
。奴隶应该绝不领先于主人。
您需要“重新开始”复制配置过程,如停止从站、锁定主站、转储主站、在从站上恢复主站、在两者上设置复制,然后解锁从站。我不得不这样做每次复制中断。 :(
更新1:
以下是我不久前对 MySQL 复制所做的一些笔记。
启用复制:
不幸的是,如果不完全锁定 MASTER 数据库,为了获得二进制日志中可供 SLAVE 启动的静态位置,就无法完成配置 MySQL 复制。
此配置演练的范围是在正确配置 /etc/my.cnf 文件并在 MASTER 和 SLAVE 服务器上设置适当的帐户后配置 MASTER 和 SLAVE。
为了配置 MySQL 复制,您需要在 MASTER 上打开两个终端会话,并在 SLAVE 上打开一个终端会话。终端 1 和 2 将指的是 MASTER 上打开的两个会话。终端 3 将引用 SLAVE 会话。
在 1 号航站楼:
- 连接到 MySQL掌握使用命令行客户端。
- 执行查询
FLUSH TABLES WITH READ LOCK;
- 这将完全锁定掌握。
- 不要退出 MYSQL 客户端。
在 2 号航站楼:
mysqldump
对要复制的数据库执行 a 。- 确保数据库转储位于共享存储上或已复制到从属服务器。
- 连接到 MySQL掌握使用命令行客户端。
- 执行查询
SHOW MASTER STATUS;
- 记下文件和位置列。
3 号航站楼:
- 恢复您刚刚从 MASTER 获取的数据库转储。
- 连接到 MySQL奴隶使用命令行客户端。
- 执行查询
CHANGE MASTER TO MASTER_HOST='<master host>', MASTER_USER='<replication user>', MASTER_PASSWORD='<replication password>', MASTER_LOG_FILE='<Filename obtained from Terminal 2>', MASTER_LOG_POS=<Position obtained from Terminal 2>;
- 现在应该启用复制;但是,日志位置不应递增。
- 如果复制未正确启动,请确保检查 mysqld 日志文件。
- 执行
SHOW SLAVE STATUS;
- 验证
Master_Log_File
和Read_Master_Log_Pos
列是否匹配文件和位置2 号航站楼注明的列。
在 1 号航站楼:
- 当查询进来时,执行查询
SHOW MASTER STATUS;
并记下文件和位置列。
- 当查询进来时,执行查询
3 号航站楼:
HOW MASTER STATUS;
在终端 1 上执行后立即执行SHOW SLAVE STATUS;
并比较Master_Log_File
和Read_Master_Log_Pos
列文件和位置分别位于 1 号航站楼。
重复步骤 4 和 5 几次。如果文件和位置非常匹配,则您已成功启用复制。恭喜。
禁用复制:
禁用复制掌握,您必须编辑/etc/my.cnf
并注释掉适当的行(有关适用行的更多信息,请参阅参考资料)。
要禁用 SLAVE 上的复制,您必须执行查询STOP SLAVE;
。
要重新启用从属复制,您必须执行查询START SLAVE;
。
复制故障排除:
有时,复制会中断。这通常是由 UPDATE 查询激增引起的。当复制中断时,主服务器和从服务器上的二进制日志开始以指数速度增长。如果没有立即识别并消除查询激增的根本原因,那么 MySQL 服务器的磁盘空间通常会在不到 10 小时的时间内被完全耗尽。
确保存储不耗尽的最快方法是完全禁用 MASTER 上的 MySQL 复制并关闭 SLAVE 上的 MySQL。
如果您的存储已开始填满,则在主服务器和从服务器上禁用复制后,请随意删除主服务器和从服务器上的所有 mysql-bin 和 mysqld-relay-bin 文件。当使用基于 RPM 的 MySQL 发行版时,这些文件通常位于 /var/lib/mysql 中。二进制日志文件的名称可以在全局 my.cnf 中配置,因此如果文件不存在,请查看配置文件。
发生损坏并且禁用复制后,您必须完成本文前面的全部详细信息才能重新启用复制。
参考: