Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过。但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面。
因此,一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力 这样的方案来进行部署与实施的。
mysql主从复制(异步)
主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。
1、基于语句的复制:主服务器上面执行的语句在从服务器上面再执行一遍,在MySQL-3.23版本以后支持。
存在的问题:时间上可能不完全同步造成偏差,执行语句的用户也可能是不同一个用户。
2、基于行的复制:把主服务器上面改编后的内容直接复制过去,而不关心到底改变该内容是由哪条语句引发的,在MySQL-5.0版本以后引入。
存在的问题:比如一个工资表中有一万个用户,我们把每个用户的工资+1000,那么基于行的复制则要复制一万行的内容,由此造成的开销比较大,而基于语句的复制仅仅一条语句就可以了。
3、混合类型的复制:MySQL默认使用基于语句的复制,当基于语句的复制会引发问题的时候就会使用基于行的复制,MySQL会自动进行选择。
配置步骤
两个相同版本的Mysql--不同服务器(ubuntu-mysql5.7)
主(47.105.85.89)
1,配置授权用户
GRANT REPLICATION SLAVE ON *.* to 'repl'@'134.175.43.128' identified by 'password';
FLUSH PRIVILEGES;
2,开启binlog,并设置server-id(唯一标识服务器),设置在[mysqld]下,重启mysql
log-bin = mysql-bin
server_id = 128(从服务器ip段)
binlog-do-db = test
log-slave-updates
show master status\G;
从(134.175.43.128)
1,同样配置,重启
2,启动数据库同步命令
change master to master_host='47.105.85.89',
master_user='repl',
master_password='password',
master_log_file='mysql-bin.000001',
master_log_pos=0
3,开始复制
start slave;
show slave status\G;
mysql 5.7.17之后,支持mysql group replication
install plugin group_replication soname 'group_replication.so';插件
单主模式
在单主模式下,只有一个节点可以可以读写,其他节点只能提供读
多主模式
在多主模式下,在加入该群组的所有成员,所有服务器都设置为读写模式,在多主模式下,不支持SERIALIZABLE事务隔离级别