mysql 主从同步
mysql 主从,其实也就是mysql 复制了, mysql 主从复制的原理就是从服务器复制主服务器的二进制日志, 复制一般有两种,一种是基于sql 语句的,一种是 基于行的,MySQL 5.6 默认是基于语句复制的,可以这样理解,我们在向主服务器写入语句时,会生成操作日志并写入二进制日志中,说白了,日志中保留的也是mysql写入的语句,从服务器从主服务器的二进制日志中复制过来语句再执行,从而达到了复制的目的,另外,从服务器可以暂停,可以选择执行哪些操作,不执行哪些操作,那依据什么呢,在每次写入主服务的二进制日志中,都会记录位置,根据这个位置来进行选择性的执行,如果要暂停从库,主库在锁表后,要记得二进制的位置,从库在恢复复制时,可从暂停的位置开始继续复制,保证数据的一致性
mysql复制的过程大概分如下几点:
1.在主服务器开启二进制功能,开启格式:log-bin='二进制文件前缀',如log-bin='jur'
2.在主服务器设置server_id,总之不要和从服务器的server_id 重复就好,编号:1-2的32次方
3.重启mysql 服务,在线上操作这些时,需要关掉MySQL数据库
4.主服务器上创建复制账号,供从服务器复制使用,复制时,需要从服务器通过账号密码连接主服务器,进行复制操作,账号同时要赋权,要给replication 的权限
例如:create user 'slave_cp'@'192,.168.50.244' identified by 'Slave@ceshi.com'
grant replication slave on *.* to 'slave_cp'@'192.168.50.244'
5.获取二进制日志信息,我们说过,二进制日志,记录了当前的操作的位置信息,为了准确的获取到二进制的位置信息,我们需要对表进行一个只读锁定,可以读,但是不能写,等获取二进制位置信息后,我们在解锁,操作如下:
flush tables with read lock;
show master status\G;
获取完成后,解锁
unlock tables;
6.从库是一个空库,我们需要把主库的数据考到从库上,使用mysql 自带的工具mysqldump即可,
mysqldump --all-databases --lock-all-tables > /tmp/data_bak.sql
scp /tmp/data_bak.sql root@192.168.50.244:/tmp/
7.在从库上,不需要开启二进制,但是要设置server_id ,不要和主库冲突即可
8.在从库上将/tmp/data_bak.sql 还原到mysql 数据库
mysql -uroot -p < /tmp/data_bak.sql
9.进入从库,设置如下:
change master to master_host='192.168.50.244',
master_user='slave_cp',
master_password='Slave@ceshi.com',
master_log_file='jur-log.000001', # 在主库查询到的位置信息
master-log_pos='367' #主库查询到的位置
10.开启从库
start slave;
11.查看从库状态,主要看厦门这2个语句是否是yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
12.验证,在主库进行新的写操作,验证从库是否同步过来
网友评论