mysql数据库的主从复制是通过bin日记来实现的。以下是我在linux上的实现。
主机:192.168.1.2
从机:192.168.1.4
先分别在主机,从机创建一个数据库movie:create database movie;
在主机上执行语句:GRANT all ON *.* TO slave@192.168.1.4 IDENTIFIED BY 'password';
创建一个mysql用户,让从机可以访问该主机。
修改主机的my.cnf配置文件:
log-bin = /db/mysql/binlog/binlog //指定bin日记的存放位置为/db/mysql/binlog
binlog-do-db=movie //指定需要在bin日记里记录的数据库是movie
server-id = 1 //server-id应该与从机不一样
修改配置文件后记得重新启动数据库。
修改从机的my.cnf配置文件:
#log-bin = /db/mysql/binlog/binlog //这句应该注释掉,因为从机不用写bin日记
replicate-do-db=movie //只对movie数据库进行复制
server-id = 2 //server-id应该与主机不一样
修改配置文件后记得重新启动数据库。
通过mysql客户端登录从机数据库,执行如下语句:
CHANGE MASTER TO
MASTER_HOST = '192.168.1.2',
MASTER_PORT = 3306,
MSTER_USER = 'slave',-----------此帐号和密码就是在主机上建立的账号和密码
MASTER_PASSWORD = 'password',
MASTER_LOG_FILE = 'mysql-bin.000009',
MASTER_LOG_POS = 126;
Master_log_file和master_log_pos是在主机上执行如下语句获得:
show master status;
从机上执行语句:slave start;然后可以通过语句查看从机的状态:show slave status;
应该看到这2个变量的状态:Slave_IO_Running: Yes,Slave_SQL_Running: Yes,出现error,则说明配置有错误。
以上就实现了mysql的主从复制,可以测试一下看看:在主机上建立一个表,然后插入几条记录,如果配置成功,那么在从机上就会出现相同的表和记录。
文章最开始的时候提到这个:
先分别在主机,从机创建一个数据库movie:create database movie;
这是针对需要新建一个数据库的情况,其实很多时候,主机可能已经运行一段时间了,这时主机已经有了一定的数据,我们可以把里面的数据通过mysqldump工具把里面的数据备份一下:mysqldump -uroot –p –S /tmp/mysql.sock movie > movie.sql;
然后再通过mysql工具将数据导入到从机:mysql –uroot –p –S /tmp/mysql.sock movie < movie.sql,当然在这之前,先要在从机中建立数据库movie.
这样,主机,从机都有了相同的数据,之后就可以通过bin日记来同步数据了。