2018.4.2 15周1次课

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018.4.2 15周1次课相关的知识,希望对你有一定的参考价值。

十五周一次课(4月2日)

17.1 mysql主从介绍

17.2 准备工作

17.3 配置主

17.4 配置从

17.5 测试主从同步

17.1 MySQL主从介绍

MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的

MySQL主从是基于binlog的,主上须开启binlog才能进行主从。

主从过程大致有3个步骤

1)主将更改操作记录到binlog里

2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里

3)从根据relaylog里面的sql语句按顺序执行

主上有一个log dump线程,用来和从的I/O线程传递binlog

从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地

MySQL主从原理图

技术分享图片

17.2 准备工作

192.168.37.100从mysql,192.168.37.101主mysql

17.3 配置主

安装mysql

修改my.cnf,增加server-id=101和log_bin=aminglinux1

修改完配置文件后,启动或者重启mysqld服务

service mysqld restart

技术分享图片

查看/data/mysql/目录下下,会多出2个已aminglinux1开头的文件,这些aminglinux1开头的文件非常重要,是实现主从的根本

aminglinux1.index //索引文件,必须要

aminglinux1.000001 //二进制日志文件,以后还会生成aminglinux1.000002等,依次类推

技术分享图片

把zrlog库备份并恢复成aming库,作为测试数据

备份zrlog库:mysqldump -uroot -paminglinux zrlog > /tmp/zrlog.sql

查看/tmp/zrlog.sql大小:du -sh /tmp/zrlog.sql

技术分享图片

新建aming数据库:mysql -uroot -paminglinux -e "create database aming"

恢复zrlog库到aming库中:mysql -uroot -paminglinux aming < /tmp/zrlog.sql

技术分享图片

对比开始时的aminglinux1.000001文件大小,可以看出文件大小也同步增加,增加的大小正好和zrlog库大小保持一致,里面完整的记录了数据库的创建过程,库,表,内容等

创建用作同步数据的用户

进入mysql:mysql -uroot -paminglinux

创建用户:grant replication slave on *.* to 'repl'@slave_ip identified by 'password'; //repl是为从(slave)端设置的访问主(master)端的用户,也就是要完成主从复制的用户。

grant replication slave on *.* to 'repl'@192.168.37.100 identified by 'password';

锁定表,不让继续写入:flush tables with read lock; //这个命令是全局读锁定,执行了命令之后所有库所有表都被锁定只读。一般都是用在数据库联机备份,这个时候数据库的写操作将被阻塞,读操作顺利进行

show master status; //查看master的状态,这是数据要记录的,一会要在slave端用到

技术分享图片

继续备份其他库

mysqldump -uroot -paminglinux mysql2 > /tmp/my2.sql

17.4 配置从

安装mysql

查看my.cnf,配置server-id=100,要求和主不一样

修改完配置文件后,启动或者重启mysqld服务:service mysqld restart

把主上aming库同步到从上:scp 192.168.37.101:/tmp/*.sql /tmp/

技术分享图片

做2个alias

alias 'mysql=/usr/local/mysql/bin/mysql'

alias 'mysqldump=/usr/local/mysql/bin/mysqldump'

进入mysql:mysql –uroot //没有设置密码

创建3个库

create database aming;

create database zrlog;

create database mysql2;

恢复3个库

mysql -uroot aming < /tmp/zrlog.sql

mysql -uroot zrlog < /tmp/zrlog.sql

mysql -uroot mysql2 < /tmp/my2.sql

要保证主从的数据要一致

登陆mysql:mysql –uroot

先关闭主从同步:stop slave;

实现主从同步:change master to master_host='', master_user='repl', master_password='', master_log_file='', master_log_pos=xx;

change master to master_host='192.168.37.101', master_user='repl', master_password='pa ssword', master_log_file='aminglinux1.000001', master_log_pos=12994;

master_log_file是主上使用show master status命令查询到的File列里的aminglinux1.000001

master_log_pos是主上使用show master status命令查询到的Position列里的12994

打开同步:start slave;

判断主从是否配置成功:show slave status\G(最后可以不用分号,\G本身就是结束符)

确认以下两项参数都为Yes

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

技术分享图片

还需关注

Seconds_Behind_Master: 0  //为主从延迟的时间

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

技术分享图片

还要到主上执行 unlock tables;

17.5 测试主从同步

几个配置参数

主服务器上

binlog-do-db=      //仅同步指定的库,多个库可以用逗号分隔

binlog-ignore-db= //忽略指定库

从服务器上

replicate_do_db=

replicate_ignore_db=

replicate_do_table= //仅同步指定的表

replicate_ignore_table= //忽略指定表

replicate_wild_do_table=   //如aming.%, 支持通配符%

replicate_wild_ignore_table=

使用时尽量使用最后两项,因为支持 库名.表名

主上使用aming库:use aming;

技术分享图片

查看表:show tables;

技术分享图片

查看log表的行数:select count(*) log;

技术分享图片

在从上也查看一下:

技术分享图片

技术分享图片

技术分享图片

主上清空log表:truncate table log;

技术分享图片

有报错,我们清空的表具有外键约束报ERROR 1701(42000)

解决方法:在主上设置外键约束=0

set foreign_key_checks=0;

truncate table log;

技术分享图片

select * from log; //表为空了

技术分享图片

从上的表也是空了

技术分享图片

主上删除log表:drop table log;

技术分享图片

从上查看log表:select * from log; //没有了

技术分享图片

恢复外键约束:set foreign_key_checks=1;

主上删除库:drop database aming;

从上查看:show databases; //没有aming库了

技术分享图片

主从配置起来虽然很简单,但是这种机制非常脆弱,一旦我们不小心再slave上写了数据,那么主从复制也就被破坏了。另外,如果重启master,务必要先关闭slave,即在slave上执行stop slave命令,然后再去重启master的MySQL服务。否则主从复制很有可能会中断,重启master后,我们还需要执行start slave命令开启主从复制的服务。

如果主从复制破坏了,在从上执行

stop slave;

start slave;

show slave status\G命令查看

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

如果没有都是yes,那只有重新做主从复制了。


以上是关于2018.4.2 15周1次课的主要内容,如果未能解决你的问题,请参考以下文章

2017.12.15 1周5次课

2017-12-15 2周1次课

2018.1.15 6周1次课

2018-1-15 6周1次课 grep

2018-1-15 6周1次课

2018.3.1 10周2次课