mysql replication 主要通过复制二进制日志,在slave上执行master一样的来SQL来保持master 和slave的数据一致。
好处不必多说, 第一个 master-slave的结构首先能实现读写分离, 对于缓解数据库Server的鸭梨会起到一定好处, 另外当master宕机的话, 可以马上切到slave上边,可以提高系统的可用性。
1. mysql 的主从复制是通过 bin log来实现的, 首先master要开启二进制日志
代码如下 | 复制代码 |
server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_ignore_db = mysql |
2. master 上要开一个专供复制的账号
grant file,select,replication slave on *.* to slave@'%' identified by '123456'; --我这里是有问题的,开了权限给所有的库 所有的机器,而且还设置了弱密码,不过做为测试机玩玩也未必不可
3. slave 机器 设置一个 server-id
server-id = 2
4. 设置复制信息
这里要先看一下当前 master 的binlog 记到哪里了, 从哪个文件开始的哪一个位置, 然后设置slave从这个地方开始复制。 所以这个时候要保证 master 和 slave的数据是一样的,这样才能保证master和slave数据的一致性。
先在master端执行 : show master status;
代码如下 | 复制代码 |
mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000015 | 26560211 | | mysql | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) |
得到当前的二进制日志文件和当前的位置
在 slave 端执行:
代码如下 | 复制代码 |
change master to master_host='192.168.57.64', master_user='slave', master_password='123456', master_log_file='mysql-bin.000015', master_log_pos=26560211; 最后 slave端 start slave; |
用 show slave status\G; 查看参数 Slave_IO_Running 和 Slave_SQL_Running, 如果两个参数都是 yes , 说明搞定