昔我往矣

MySQL复制

2012年11月18日

MySQL复制是指将一台数据库服务器上的数据往其它数据库上进行复制,可以做到将数据完整备份等。

下面是“主”-->“从”模式:
以两台数据库服务器之间的复制为例,一台为主服务器(Master),另一台为从服务器(Slave)。主服务器开启Dump进程,将数据库的二进制日志发往Slave,Slave主机的I/O进程获得该数据,并保存在Slave的中继日志(Relay log)里,Slave的SQL进程从中继日志中一次读取一句,并在服务器上执行。从而完成同步工作。数据库复制以异步方式工作,Master只负责把数据发送出去,并不保证Slave一定能收到。

配置过程如下:

Master:192.168.1.1
Slave:192.168.1.100

一、在Master和Slave上分别安装mysql-server(注意:Slave的服务器软件版本不能比Master的mysql-server软件版本低。);

# yum -y install mysql-server
# setenforce 0
# service iptables stop

二、在master和slave上分别创建数据目录,并启动服务;

# mysql_install_db --user=mysql --datadir=/mydata
# service mysqld start

三、修改配置文件/etc/my.cnf

# cp /usr/share/mysql/my-large.cnf /etc/my.cnf

在Master上做如下修改:

server-id=1
log-bin=mysql-bin  #启用二进制日志
#在Slave上做如下修改:
log-bin=mysql-bin  
server-id=10
relay-log=relay-bin   #启用中继日志(默认没有这一句,要自己添加)

注意:Master和Slave的server-id一定不能一样,重启mysql

# service mysqld restart

四、进入数据库里面

# mysql -u root -p
#在Master机器上:
mysql> grant replication client,replication slave on *.* to repl@'192.168.1.%' identified by '123456';   #建立用户repl并分配相应权限
mysql> flush privileges;
mysql> show grants for repl@'192.168.1.%';  #查看刚建立的用户
#在Slave机器上:
mysql> change master to master_host='192.168.1.1',master_user='repl',master_password='123456';
mysql> start slave;
mysql> show slave status\G;

如果看到如下两行,代表复制进程已经开始正常工作了!

        Slave_IO_Running: Yes
        Slave_SQL_Running: Yes

五、测试!
在Master上新建立一个数据库,可以发现Slave上很快也有了同样的一个数据库!
(不截图啦,大家自己玩去喽!!!)
提示,即使slave机器的mysql服务down掉,当再次启动slave数据库的时候,还是可以获得在down掉期间Master上新生成的数据。

已有 13 条评论 »

添加新评论 »