基本原理
mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
mysql主从配置方法
在进行mysql主从备份时,最好确保主从服务器的版本兼容。
从服务器至少与主服务器版本相同或更高。
主机(master)配置:
修改mysql配置文件my.cnf
在[mysqld]标签下添加以下几行
log-bin #开启二进制日志
server-id=1 #主服务器id号
binlog-do-db=mydb #指定对mydb记录二进制日志
为从服务器添加mysql账户并配置权限
在主服务器上,必须为从服务器创建一个用来连接主服务器的用户,并设置replication slave权限。所用具体命令如下:
grant replication slave
on *.*
to 'test_rep' @ '从服务器IP' identified by 'test';
这时在mysql库的user表中使用 select * from user where user = 'test_rep' \G; 可以看到Repl_slave_priv项对就的值为Y。
导出主服务器数据
导出主服务器数据,以备之后将其导入从服务器,使主从服务器的初始状态保持一致
记录File 及Position 项的值
重启mysql,使用
show master status\G;
至此主服务器配置完毕
slave配置:
修改mysql配置文件my.cnf
在[mysqld]标签下添加以下面一行:
server-id=id #从机id
导入主机数据库
重启mysql数据库并设置相关参数
change master to
master_host = 'master地址',
master_user = 'test_rep',
master_password = 'test',
master_log_file = 'darkstar-bin.000006',
master_log_pos = 709;
slave start;
检查数据库查看相关参数
使用以下命令查看slave启动的情况:
show slave status \G;
对部分参数的解释: Slave_IO_State: Waiting for master to send event Slave_IO_Running: Yes Slave_SQL_Running: Yes
如上几个参数结果则可证明slave正常运行,正等待主服务器发来的消息。Master_Log_File和Read_Master_Log_Pos。Master_Log_File代表主机上用于主备同步的日志文件名,Read_Master_Log_Pos代表上一次成功同步到的日志文件中的位置。 如果这两项与先前在主服务器上看到的File及Position的值不相符,则无法正确进行同步。
Java项目中的使用
- 引入mysql-connector.jar驱动包
- 代码中引用:
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.ReplicationDriver");
dataSource.setUrl("jdbc:mysql:replication://masterHost:port,slaveHost1:port,slaveHost2:port/mydb);
转载于:https://my.oschina.net/crazyharry/blog/1105130