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,那只有重新做主从复制了。

原文地址:http://blog.51cto.com/415326/2093964

时间: 2024-10-10 06:19:20

2018.4.2 15周1次课的相关文章

2018.4.10 15周5次课

十五周五次课(4月10日) 18.6 负载均衡集群介绍 18.7 LVS介绍 18.8 LVS调度算法 18.9/18.10 LVS NAT模式搭建 18.6 负载均衡集群介绍 主流开源软件LVS.keepalived.haproxy.nginx等 其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,也可以当做7层使用 keepalived的负载均衡功能其实就是lvs lvs这种4层的负载均衡是可以分发除80外的其他端口通信的,比如MySQL的,而ng

2018.3.1 10周2次课

十周第二次课(3月1日) 11.14/11.15 Apache和PHP结合 11.16/11.17 Apache默认虚拟主机 11.14/11.15 Apache和PHP结合 配置httpd支持php httpd主配置文件/usr/local/apache2.4/conf/httpd.conf vim /usr/local/apache2.4/conf/httpd.conf   //修改以下4个地方 ServerName 搜索ServerName,把#ServerName www.example

2018.1.9 5周2次课

五周第二次课(1月9日) 7.6 yum更换国内源 7.7 yum下载rpm包 7.8/7.9 源码包安装 7.6 yum更换国内源 1.恢复之前备份的文件 2. 进入"/etc/yum.repos.d"目录 3.删除"CentOS-Base.repo"文件 4.下载"163.repo"文件 wget http://mirrors.163.com/.help/CentOS7-Base-163.repo curl -O http://mirrors

2018.1.16 6周2次课

六周第二次课(1月16日) 9.4/9.5 sed 9.4/9.5 sed 其实grep工具的功能还不够强大,它实现的只是查找功能,而不能把查找的内容替换.以前用vim操作文档的时候,可以查找也可以替换, 但只限于在文本内部操作,而不能输出到屏幕上.sed工具以及后面要介绍的awk工具就能把替换的文本输出到屏幕上,而且还有其他更丰富的功能.sed和awk都是流式编辑器,是针对文档的行来操作的. sed  '/x/'p filename:匹配x字符 sed  -n  '/x/'p  filenam

2018.4.23 17周4次课

十七周4次课(4月23日) 20.20 告警系统主脚本 20.21 告警系统配置文件 20.22 告警系统监控项目 20.20 告警系统主脚本 创建告警系统的目录: [[email protected] /usr/local/sbin]# mkdir mon [[email protected] /usr/local/sbin]# ls mon  nginx_log_rotate.sh [[email protected] /usr/local/sbin]# cd mon [[email pro

2018.1.29 8周1次课

八周一次课(1月29日) 10.23 linux任务计划cron 10.24 chkconfig工具 10.25 systemd管理服务 10.26 unit介绍 10.27 target介绍 10.23 linux任务计划cron 其实大部分系统管理工作都是通过定期自动执行某个脚本来完成的, 那么如何定期执行某个脚本呢? 这就要借助Linux的cron功能了 Linux任务计划功能的操作都是通过crontab命令来完成的, 其常用的选项有以下几个. -u:表示指定某个用户,不加- u选项则为当

2018.4.25 18周1次课

十八周一次课(4月25日) 20.27 分发系统介绍 20.28 expect脚本远程登录 20.29 expect脚本远程执行命令 20.30 expect脚本传递参数 20.27 分发系统介绍 expect是一种能够按照脚本内容里面设定的方式与交互式程序进行"会话"的程序.根据脚本内容,Expect可以知道程序会提示或反馈什么内容以及什么是正确的应答.它是一种可以提供"分支和嵌套结构"来引导程序流程的解释型脚本语言. 我们熟知的shell编程功能虽然很强大,但是

2018.1.8 5周1次课

五周第一次课(1月8日) 7.1 安装软件包的三种方法 7.2 rpm包介绍 7.3 rpm工具用法 7.4 yum工具用法 7.5 yum搭建本地仓库 7.1 安装软件包的三种方法 rpm工具 yum工具 源码包 在Windows系统下安装软件很简单,只要双击后缀为.exe的文件,然后根据提示连续单击"下一步" 按钮即可. 然而在Linux系统下安装软件就没那么容易了,因为我们不是在图形界面下.所以,你必须学会如何在Linux下安装软件 前面我们多次提到了yum命令,它是Red Ha

2018.1.10 5周3次课

五周第三次课(1月10日) 8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重定向 8.1 shell介绍 shell是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具.实际上,在shell和计算机硬件之间还有一层东西一一系统内核.如果把计算机硬件比作一个人的躯体,那系统内核就是人的大脑.至于shell,把它比作人的五官似乎更贴切些.言归正传,用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系