mysql主从同步
1.为什么要主从同步?
在Web应用系统中,数据库性能是导致系统性能瓶颈最主要的原因之一。尤其是在大规模系统中,数据库集群已经成为必备的配置之一。集群的好处主要有:查询负载、数据库复制备份等。其中Master负责写操作的负载,也就是说一切写的操作都在Master上进行,而读的操作则分摊到Slave上进行。这样一来的可以大大提高读取的效率。写操作涉及到锁的问题,不管是行锁还是表锁还是块锁,都是比较降低系统执行效率的事情。我们这样的分离是把写操作集中在一个节点上,而读操作其其他的N个节点上进行,从另一个方面有效的提高了读的效率,保证了系统的高可用性。
2、怎样配置主从?
首先安装两台mysql数据库,例:我的主数据库是mysql,从数据库是mysql2
配置主服务
1:找到数据库安装位置里的my.ini文件,打开在最后加上以下内容
#这是数据库ID,此ID是唯一的,ID值不能重复,否则会同步出错
server-id=1
#二进制日志文件,此项为必填项,否则不能同步数据;如果不取名字的话,
#那么就会以计算机的名字加编号来命名二进制文件;
log-bin=mysql-bin
#需要同步的数据库,如果还需要同步另外的数据库,那么继续逐条添加,
#如果不写,那么默认同步所有的数据库 需要同步多个数据库用逗号分隔
binlog-do-db=test
#若涉及及同步函数或者存储过程需要配置,否则主备会产生异常不能同步
#log_bin_trust_function_creators = TRUE
#不需要同步的数据库,如果指定了binlog-do-db这里应该可以不用指定的
#binlog-ignore-db=mysql
保存文件后重启mysql服务,链接mysql数据库执行以下sql
GRANT REPLICATION SLAVE ON *.*TO 'my_slave'@'127.0.0.1' IDENTIFIED BY '123456';
执行成功后在执行以下sql,并记录执行结果
show master status;
到现在为止主服务配置好了,接下来配置从服务mysql2
找到mysql2安装位置里的my.ini文件,打开并在文件最后加上以下内容
#这是数据库ID,此ID是唯一的,ID值不能重复,否则会同步出错
server-id=2
#二进制日志文件,此项为必填项,否则不能同步数据;如果不取名字的话,那么就会以计算机的名字加编号来命名二进制文件;
log-bin=mysql-bin
#需要同步过来的数据库
replicate-do-db=test
重启mysql2的服务,并连接mysql2数据库,执行以下sql
change master to
master_host='127.0.0.1',
master_port=3306,
master_user='my_slave',
master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=106;
master_host:master IP
master_user:master数据库通过GRANT授权的账号
master_port:master数据库使用的端口号
master_password:master数据库通过GRANT授权的密码
master_log_file:master数据库中通过show master status显示的File名称
master_log_pos:master数据库中通过show master status显示的Position数据
接下来启动从服务即可,执行一下命令
slave start;
到这一步mysql主从同步就配置好了,接下来测试就可以了
注意事项:
1: 需要同步的从数据库需要保证和主数据库初始化表一样
2: 主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间,主从数据不一致。
3: 如果主从的网络断开,从会在网络正常后,批量同步。
4: 如果对从进行修改数据,那么很可能从在执行主的bin-log时出现错误而停止同步,这 个是很危险的操作。所以一般情况下,非常小心的修改从上的数据。