主从复制简介
主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。
主从复制优势
1、提升系统并发性能
分担单库并发压力,提高响应速度
2、数据备份
可从从库进行数据备份,不影响整体
2、高可用
当Master挂掉后,可以指定一台Slave充当Master继续保证服务的运行,因为数据是一致性的(如果当插入时Master就挂掉,可能不一致,因为同步也需要时间)当然这种配置不是简单的把一台Slave充当Master,毕竟还要考虑后续的Slave的数据同步到Master。在主服务器上执行写入和更新,在从服务器上向外提供读功能,达到读写分离的效果,也可以动态地调整从服务器的数量,从而调整整个数据库的性能;在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能。
主从复制原理
Master服务器将数据的改变记录二进制日志,当Master上的数据发生改变时,则将其改变写入二进制日志中,Salve服务器会在一定时间间隔内对Master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求Master二进制事件,同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。
主从复制配置
1.主库配置
修改MySQL配置
vi /etc/my.cnf,在[mysqld]下插入:
[mysqld]
log-bin=mysql-bin # 开启二进制日志
server-id=1 #设置server-id,需要唯一
binlog-do-db = test #只同步哪些数据库,除此之外别的都不同步
重启MySQL
service mysql restart
创建用于数据同步的账号
mysql -u root -p
# 创建用户,其中用户名后的为从数据ip地址
CREATE USER 'MySlave'@'192.168.xx.xx' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'password';
#分配权限
GRANT REPLICATION SLAVE ON *.* TO 'MySlave'@'192.168.xx.xx';
#刷新权限
FLUSH PRIVILEGES;
查看master状态
show master status;
2.从库配置
修改MySQL配置
vi /etc/my.cnf,在[mysqld]下插入:
[mysqld]
log-bin=mysql-bin # 开启二进制日志
server-id=2 #设置server-id,需要唯一
重启MySQL
service mysql restart
进入mysql,进行同步
mysql -u root -p
#指定master
CHANGE MASTER TO MASTER_HOST='192.168.xx.xx', MASTER_USER='MySlave', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=156;
启用同步
start slave;
查看slave状态
show slave status\G;
如下图即为正常,可创建表,添加数据验证
互为主从
经过上面的锤炼,互为主从其实就是反过来操作就可以啦。
备注
1.究其原理,master库原先有数据,需手动迁移到slave库。
2.若发生SQL错误,已手动解决问题,可通过如下指令跳过错误
stop slave;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;
本文由 Administrator 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站部分文章采集自互联网,因某些原因未注明出处,如有侵权,请留言告知。