合理使用MySQL数据库的同步功能,可以极大帮助我们实现数据库的冗灾、备份、恢复、负载均衡等。
这里就介绍常见的MySQL同步设置方法。
一、好马配好鞍,先准备服务器
由于MySQL不同版本之间的(二进制日志)binlog格式可能会不一样,因此最好的搭配组合是Master的MySQL版本和Slave的版本相同或者更低,而且Master的版本肯定不能高于Slave版本。
本文中,我们用到mysql主服务器(以下简称Master)和mysql从服务器(以下简称Slave)的版本都是5.0.15,操作系统平台是Linux Ubuntu 5.0.x。
里面同步Master的主机名为:rep1,Slave主机名为:rep2,2个MySQL的basedir目录都是/usr/local/mysql,datadir都是:/usr/local/mysql/data。
二、设置同步服务器
1、设置同步Master
每个同步服务器都必须设定一个唯一的编号,否则会导致同步不能正常运行。接下来开始修改 my.cnf,增加以下几行:
server-id = 1 log-bin set-variable=binlog-ignore-db=mysql
然后在Master上增加一个账号专门用于同步,如下:
mysql>GRANT REPLICATION SLAVE ON *.* TO rep@rep2 IDENTIFIED BY 'rep';
如果想要在Slave上有权限执行 "LOAD TABLE FROM MASTER" 或 "LOAD DATA FROM MASTER" 语句的话,必须授予全局的 FILE 和 SELECT 权限:
mysql>GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO rep@rep2 IDENTIFIED BY 'rep';
第三行表示不记录数据库mysql的更新日志,这就避免了Master上的权限设置等被同步到Slave上,如果对这方面没有限制,就可以不设置这个参数。
接下来开始备份Master上的数据,首先执行如下SQL语句:
mysql>FLUSH TABLES WITH READ LOCK;
注意这时不要退出这个终端,否则这个锁就不生效了;接着导出数据,可以直接打包压缩数据文件,也可以使用mysqldump工具来做,推荐前者的方法,比较快捷简便。
root$cd /usr/local/mysql root$tar zcf data.tar.gz ./data (在这里也可能是 "var" 等其它实际存放数据文件的目录,根据实情而定)
然后将这些数据拷贝到Slave服务器上,解开,设置好正确的权限及属主等;之后,执行 "UNLOCK TABLES" 语句来释放锁。
mysql>UNLOCK TABLES; |