Mysql的 replication是一种多个mysql数据库做主从同步的方案,它是一个异步复制的过程,从一个主数据库(master)将数据复制
到一个或者多个从数据库(slave),我们可以将应用对于数据库写的操作写入master,而读的操作则从slave读取,这样可以有效的分
担master的压力,从而更好的支持并发。
mysql的主从复制配置比较简单,实验中我使用 本机 192.168.2.149作为master,另一台192.168.2.139作为slave进行配置。
需要注意的是mysql的版本,slave与master最好保持一致,至少要保证salve的版本高于master,否则会存在兼容性的问题。
实验环境:
master: 操作系统 fedora 17, mysql 版本 5.5.29
slave: 操作系统 fedora19,mysql版本 5.5.35
首先配置master:
安装完mysql之后,修改/etc/my.cnf文件,在[mysqld]属性下加入:
#slave会基于此log-bin来做replication
log-bin=/var/lib/mysql/mysql-bin.log
#master的标识
server-id=1
#需要同步的数据库
binlog-do-db=ssh
#保持使用事务的InnoDb在复制过程中的一致性
innodb_flush_log_at_trx_commit=1
sync_binlog=1
然后保存退出,并且重启mysql。
进入mysql的命令行模式,执行:
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@'192.168.2.%' IDENTIFIED BY 'repl';
在master上创建账户repl,密码repl,以供slave用这个帐号来做数据同步,其中ip配置 192.168.2.%,%为通配符,可以让ip为
192.168.2.0到192.168.2.255的机子都使用repl账户来登录master。
然后show master status; 查看master状态:
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 1353 | ssh | |
+------------------+----------+--------------+------------------+
记住file和 position的值,slave配置中需要用到。
配置slave:
同样,先配置/etc/my.cnf文件,在[mysqld]属性下加入如下配置:
#log-bin文件位置,跟master配置成一致,可以方便主从切换
log-bin=/var/lib/mysql/mysql-bin.log
#slave的标识,建议使用ip的最后一段
server-id=139
#需要复制的数据库
replicate-do-db=ssh
#只读
read-only=1
修改完成之后重启mysql,然后进入mysql命令行模式,输入
mysql-> CHANGE MASTER TO MASTER_HOST='192.168.2.149', #指定master
-> MASTER_USER='repl', #登录账户
-> MASTER_PASSWORD='repl', #登录密码
-> MASTER_LOG_FILE='mysql-bin.000001', #master log file
-> MASTER_LOG_POS=1353; #master log file position
配置完成之后,start slave; 这样主从服务器数据同步就开始了。
执行show slave status; 如果看到 Slave_IO_State的状态是 Waiting for master to send event,则说明配置成功了。
最后是实验阶段,在master数据库中 create database ssh; 会看到 slave 数据库show databases; 看到同样建好了数据库ssh。
在master创建一个name表,id主键,name字段; 在slave数据库 ssh中一样看到了表name。
在master执行 insert into (name) values('aaa'); 在slave中执行 select * from name; 即可看到刚在master插入的值。
mysql 的主从复制至此配置完成。
半同步复制:
半同步复制只支持mysql 5.5 之后的版本。
首先要配置好主从复制。
master端:install plugin rpl_semi_sync_master soname
'semisync_master.so'
;
set
global
rpl_semi_sync_master_enabled=
on
;
slave端: install plugin rpl_semi_sync_slave soname
'semisync_slave.so'
;
set
global
rpl_semi_sync_slave_enabled=
on
;
即可配置完成,通过命令 show variables
like
'rpl_semi%'
;
可以查看半同步复制的配置状态。