MySQL主从复制,半同步,主主复制架构的实现
[日期:2012-07-09]
来源:Linux社区
作者:leejia
[字体:大 中 小]
二,主从复制架构的实现
注意:我们从服务器的版本要和主服务器的版本相同或高与主服务器的版本
第一种情况:
当我们的主服务器和从服务器都是新的,主服务器中并没有数据。
主服务器上的配置:
1,查看二进制日志的状态,开启二进制日志
MySQL> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
如果没有上面显示的off状态,则:
#vim /etc/my.cnf:
在[mysqld]的配置中,添加如下行:
log-bin=mysql-bin
2,更改mysql服务器的server id:
#vim /etc/my.cnf
在[mysqld]的配置中修改:
server-id = 1
重启mysql服务器使生效:
#service mysqld restart
3,建立仅限slave主机使用的专门用于进行复制数据的用户:
mysql> grant replication client,replication slave on *.* to repl@'172.16.30.6' identified by '123456';
刷新授权表,使账户立即生效:
mysql> flush privileges;
4,清空日志:
mysql> flush master;
从服务器的配置:
1,开启中继日志:
我们也可以关闭中继日志,由于我们的从服务器不需要时间点回复等功能,故可以关闭,减少资源浪费。但是,中继日志是必须开启的。
#vim /etc/my.cnf
在[mysqld]的配置中注释掉如下行:
log-bin=mysql-bin
在[mysqld]的配置中添加如下行:
relay-log=relay-bin
2,修改server id:
server id标识一台mysql服务器,为了避免循环复制,主从服务器的server id必须不同
#vim /etc/my.cnf
在[mysqld]的配置中修改:
server-id = 11
重启服务器:
# service mysqld restart
3,指定主服务器:
这里指定的要和在主服务器上建立的用户相同:
mysql> change master to master_host='172.16.30.5',master_user='repl',master_password='123456';
4,启动从服务器进程并查看运行状态;
mysql> start slave;
mysql> show slave status\G
如果出现如下行,则表明正常启动
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
好了,这样我们的主从服务器就搭建好了。而通常生产情况下,我们是在正在使用的mysql服务器上做从服务器,这就是我们的第二种情况。
第二种情况:
为正在使用的mysql服务器做从服务器。
主服务器上的配置:
1,查看二进制日志的状态,开启二进制日志
2,更改mysql服务器的server id
3,建立仅限slave主机使用的专门用于进行复制数据的用户
(以上三个步骤,同第一种情况的操作)
4,备份mysql数据库中的数据:
由于我们的mysql服务器处于工作状态,并且数据量通常是非常大的,故我们选择使用热备份,不耽误服务器提供服务,而备份之后可以直接在从服务器上导入。
安装好我们的备份工具Xtrabackup,其最新版的软件可从 http://www.percona.com/software/percona-xtrabackup/ 获得(具体的介绍使用,请看我的博客”mysql数据库的备份与还原“)
我们首先建立一个目录,用于存放备份的数据:
#mkdir /backup
安装xtrabackup工具:
# rpm -ivh percona-xtrabackup-2.0.0-417.rhel5.i386.rpm --nodeps
完全备份:
# innobackupex --user=DBUSER --password=DBUSERPASS /backup
# ls /backup (会生成一个时间戳的目录,里面就是备份的数据文件)
2012-03-18_10-58-22
准备完全备份文件,使完全备份文件能直接能被用作还原文件:
# innobackupex --apply-log /backup/2012-03-18_10-58-22
ok,我们的备份做好了,把它传输到从服务器上:
# cd /backup
# tar jcf backup.tar.gz 2012-03-18_10-58-22
# scp backup.tar.gz root@172.16.30.6:/tmp
从服务器上的配置:
1,先将主服务器备份好的数据还原
#cd /tmp
#tar xf backup.tar.gz
#cd /tmp/2012-03-18_10-58-22
找到我们做好完全备份时的二进制日志的终止点,这个可以作为我们恢复即时点的起始点:
# cat xtrabackup_binlog_info
mysql-bin.000002 513
我们这里是完全备份的恢复,要关闭服务:
#service mysqld stop
请确保我们从服务器上的/mydata/data这个目录是空的
#rm -rf /mydata/data/*
安装好xtarbackup工具(同上),然后还原数据文件:
# innobackupex --copy-back /tmp/2012-03-18_10-58-22
更改数据文件的属组属主:
#cd /mydata/data
#chown -R mysql.mysql .
启动服务:
# service mysqld restart
2,开启中继日志:
3,修改server id:(这两步的操作同第一种情况)
4,指定主服务器:
由于我们在主服务器上做好备份到我们把从服务器启动这段时间,主服务器上一直有数据产生,故要做时间点恢复,指定二进制文件和位置:
mysql> change master to master_host='172.16.30.5',master_user='repl',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=513;
5,启动从服务器进程并查看运行状态;
mysql> start slave;
mysql> show slave status\G
如果出现如下行,则表明正常启动
Slave_IO_Running: Yes
Slave_SQL_Running: Yes