在小型单机应用中,往往所有服务都是部署在一台服务器上的,这时候的流量一般也不高。可是当产品不断发展,流量越来越多的情况下,服务器IO性能有限,单机肯定就扛不住了,这时候就只能增加服务器,随之而来的问题就是2台服务器的mysql数据肯定不一致,这时就需要用到主从复制了。
MySQL主从复制有多种形式,这里以一主一从的实现过程为例
编辑my.cnf
#需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可
binlog-do-db=demo
# 二进制存放的目录和名字
log-bin=demo-bin-log
#binlog记录格式,这个参数有3个值
#基于SQL语句的复制(statement-based replication,SBR),对应STATEMENT
#基于行的复制(row-based replication,RBR),对应ROW
#混合模式复制(mixed-based replication,MBR),对应MIXED。
binlog_format=mixed
# 标志 master的唯一标识
server-id=1
重启mysql
输入show master status
查看服务器状态
一般会选择创建一个有权限同步数据的账号提供给slave使用
#replication slave:表示将同步复制权限授予给用户。
#on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,*表示所有。
# 此外需要说明的是replication slave是全局权限(Global privilege),不能单独指定给数据库级别
#to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制。
#identified by:指定用户的登录密码
grant replication slave on *.* to 'wrath'@'%' identified by '123456';
#重新加载一下权限,将权限信息从内存中写入数据库。
flush privileges;
slave开始同步
#执行同步命令,设置主服务器ip,同步账号密码,同步位置
mysql>change master to master_host='mysql_m',master_user='wrath',master_password='123456',master_log_file='demo-bin-log.000001',master_log_pos=154;
#开启同步功能
mysql>start slave;
查看slave状态
Slave_IO_Running及Slave_SQL_Running为Yes状态说明同步正常
Comments