解决MySQL Replication出错一例

原贴:http://imysql.cn/node/304

解决MySQL Replication出错一例

<script src="http://imysql.cn/misc/cr.js" langauge="javascript" type="text/javascript"></script>

作/译者:叶金荣(Email: ),来源:http://imysql.cn,转载请注明作/译者和出处,并且不能用于商业用途,违者必究。

os: redhat as4
master: MySQL 4.0.23
slave : MySQL 5.0.37

slave日志中报错信息如下:

060807 11:40:17 [ERROR] While trying to obtain the list of 
slaves from the master 'xxx.xxx.xxx:3306', user 'rep' got the
following error: 'Access denied. You need the REPLICATION SLAVE
privilege for this operation'

在master上,执行以下语句查看权限:

mysql>SHOW GRANT FOR 'rep'@'192.168.0.2'/G
*************************** 1. row ***************************
Grants for rep@192.168.0.2: GRANT SELECT, REPLICATION SLAVE ON
*.* TO 'rep'@'192.168.0.2' IDENTIFIED BY PASSWORD 'xxx'

已经授予了 REPLICAION SLAVE 权限了,怎么还会报这个错呢?
通过查看手册和源码,才知道slave需要执行一个语句来更新slave列表:

SHOW SLAVE HOSTS;

而执行这个语句则需要 REPLICAION CLIENT 权限,因此才会报错。因此,只要重新给 'rep' 帐号加上 REPLICAION CLIENT 权限就可以了。
另外,在 MySQL 4.0/4.1 等老版本中似乎不存在这样的问题,因为在这些版本中 REPLICAION CLIENT 权限没有被用到。

MySQL 中文网,打造最好的 MySQL 中文网! 
<think>好的,用户想了解MySQL主从复制的过程。首先,我需要回忆一下主从复制的基本原理和步骤。主从复制主要涉及主服务器(Master)和从服务器(Slave),通过二进制日志(binlog)实现数据同步。 首先,主服务器需要开启二进制日志功能,并配置唯一的server-id。这通常在my.cnf文件中设置。然后,主服务器上要创建一个用于复制的用户,并授权给从服务器。这一步很重要,因为从服务器需要通过这个用户来连接主服务器并获取日志。 接下来,从服务器也需要配置唯一的server-id,并启用中继日志(relay log)。从服务器通过CHANGE MASTER TO命令指定主服务器的信息,包括主机的IP地址、端口、用户名、密码以及二进制日志的位置。然后启动复制进程,从服务器会开始拉取主服务器的二进制日志,并重放这些日志事件,从而保持数据同步。 不过,用户可能对具体步骤不太清楚,比如如何配置主从服务器的配置文件,或者如何查看复制状态。需要详细说明每个步骤的具体操作,比如修改my.cnf的哪些参数,如何创建复制用户,以及如何检查复制是否正常工作的命令,比如SHOW MASTER STATUS和SHOW SLAVE STATUS。 另外,用户可能对主从复制的原理感兴趣,比如异步复制、半同步复制等不同模式的区别,或者复制过程中可能出现的问题,比如数据不一致或延迟。虽然用户的问题主要集中在过程详解,但适当提及这些方面可以增加回答的全面性。 需要确保回答结构清晰,分步骤讲解,并给出示例配置和代码,如配置文件的内容和SQL命令。同时,引用相关的参考资料,比如配置文件的示例和命令的使用,确保信息的准确性。最后,生成相关问题,帮助用户进一步学习,比如主从复制的优缺点或故障排除方法。 检查是否有遗漏的步骤,比如重启MySQL服务使配置生效,或者在从服务器上正确设置复制起点。还要注意术语的一致性,避免用户混淆。确保所有技术细节准确,比如二进制日志和中继日志的作用,以及复制线程(IO线程和SQL线程)的功能。 最后,用中文自然流畅地组织内容,按照用户的要求分步骤说明,并附上相关引用。生成的示例配置和命令需要正确无误,避免用户操作时出错。同时,相关问题要针对主从复制的常见疑问,帮助用户深入理解。</think>### MySQL主从复制过程详解 MySQL主从复制通过二进制日志(binlog)实现数据同步,过程分为**主服务器配置**、**从服务器配置**和**数据同步**三个阶段。 --- #### 一、主服务器配置 1. **修改配置文件** 在主服务器的`my.cnf`(或`my.ini`)中添加以下配置: ```ini [mysqld] server-id = 1 # 唯一标识主服务器 log-bin = mysql-bin # 启用二进制日志 binlog-format = ROW # 日志格式(可选ROW/STATEMENT/MIXED) ``` 重启MySQL服务使配置生效[^3]。 2. **创建复制用户** 登录MySQL,创建用于复制的用户并授权: ```sql CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; FLUSH PRIVILEGES; ``` 3. **查看主库状态** 执行以下命令记录当前二进制日志位置: ```sql SHOW MASTER STATUS; ``` 输出示例: ``` +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 107 | | | +------------------+----------+--------------+------------------+ ``` 需记录`File`和`Position`值,供从服务器使用[^2]。 --- #### 二、从服务器配置 1. **修改配置文件** 在从服务器的`my.cnf`中添加: ```ini [mysqld] server-id = 2 # 唯一标识从服务器 relay-log = mysql-relay-bin # 启用中继日志 read-only = 1 # 从库设为只读(可选) ``` 2. **配置主库连接信息** 登录MySQL,执行: ```sql CHANGE MASTER TO MASTER_HOST = '主服务器IP', MASTER_USER = 'repl_user', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000001', -- 主库SHOW MASTER STATUS中的File值 MASTER_LOG_POS = 107; -- 主库SHOW MASTER STATUS中的Position值 ``` 3. **启动复制** 执行以下命令启动复制线程: ```sql START SLAVE; ``` 4. **检查复制状态** 查看从库状态: ```sql SHOW SLAVE STATUS\G ``` 若`Slave_IO_Running`和`Slave_SQL_Running`均为`Yes`,则复制正常[^1]。 --- #### 三、数据同步过程 1. **主库写入数据** 主库执行写操作时,会记录二进制日志(binlog)。 2. **从库拉取日志** 从库的**IO线程**连接主库,拉取binlog并写入本地中继日志(relay log)。 3. **从库重放日志** 从库的**SQL线程**读取relay log,解析并重放SQL语句,实现数据同步。 --- #### 关键概念 - **异步复制**:默认模式,主库不等待从库确认即提交事务。 - **半同步复制**:主库等待至少一个从库接收binlog后才提交事务(需插件支持)。 - **GTID(全局事务标识)**:通过事务唯一ID替代`File`和`Position`,简化故障切换。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值