如何在MySQL中设置数据库复制
版本1.1
作者:Falko Timme
最后编辑:01/14/2006
本教程介绍如何在MySQL中设置数据库复制。 MySQL复制允许您从其他服务器(从服务器)上的主服务器获取数据库的准确副本,并且主服务器上数据库的所有更新都将立即复制到从服务器上的数据库,以便两个数据库都处于同步状态。 这不是备份策略,因为也会在从属设备上执行意外发出的DELETE命令; 但复制可以帮助防止硬件故障。
在本教程中,我将介绍如何将数据库exampledb从主机复制到IP地址192.168.0.100到从站。 两个系统(主从)都运行Debian Sarge ; 然而,配置应该适用于几乎所有的配置,很少或没有修改。
两个系统都安装了MySQL,并且具有表和数据的数据库exampledb已经存在于主服务器上,但不存在于从服务器上。
我想先说说这不是建立这样一个系统的唯一途径。 实现这一目标有很多方法,但这是我所采取的方式。 我不会保证这将为您工作!
1配置主设备
首先我们要编辑/etc/mysql/my.cnf 。 我们必须为MySQL启用网络,MySQL应该监听所有IP地址,因此我们会注释掉这些行(如果存在):
#skip-networking |
此外,我们必须告诉MySQL哪个数据库应该写入日志(这些日志被从机使用以查看主机上发生了什么变化),哪个日志文件应该使用,我们必须指定这个MySQL服务器是主。 我们要复制数据库exampledb ,所以我们把以下行放在/etc/mysql/my.cnf中 :
log-bin = /var/log/mysql/mysql-bin.log |
然后我们重新启动MySQL:
/etc/init.d/mysql重启
然后我们以root身份登录MySQL数据库,并创建具有复制权限的用户:
mysql -u root -p
输入密码:
现在我们在MySQL shell上。
GRANT REPLICATION SLAVE ON *。* TO'slave_user'@'%'IDENTIFIED BY'<some_password>'; (用真实密码替换<some_password> !)
FLUSH特权
接下来(仍然在MySQL shell上)这样做:
使用示例
带有读锁的冲洗台;
显示主状态
最后一个命令将显示如下:
+---------------+----------+--------------+------------------+ |
写下这些信息,我们以后会需要Minion!
然后离开MySQL shell:
放弃;
有两种可能性可以将现有的表和数据从exampledb从主设备到从设备。 第一个是进行数据库转储,第二个是使用 LOAD DATA FROM MASTER; 命令在Minion上。 后者的缺点是主机上的数据库将在此操作期间被锁定 ,因此如果您在高流量生产系统上拥有大型数据库,则这不是您想要的,并且我建议遵循此操作中的第一种方法案件。 然而,后一种方法非常快,所以我将在这里描述。
如果你想遵循第一种方法,那么这样做:
mysqldump -u root -p <password> --opt exampledb> exampledb.sql (将<password>替换为MySQL用户root的真实密码! 重要提示 :-p和<password>之间没有空格!)
这将在exampledb.sql文件中创建exampledb的SQL转储。 将此文件传输到您的从属服务器!
如果你想从大师的LOAD DATA FROM; 那么你现在没有什么必须做的。
最后我们必须解锁exampledb中的表:
mysql -u root -p
输入密码:
UNLOCK TABLES;
放弃;
现在主机上的配置已经完成。 对Minion...