第十七章、mysql主从配置

17.1 MySQL主从介绍
17.2 准备工作
17.3 配置主
17.4 配置从
17.5 测试主从同步
17.6扩展
17.7课堂笔记
 
17.1 MySQL主从介绍
MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的
 
MySQL主从是基于binlog的,主上须开启binlog才能进行主从。
 
主从过程大致有3个步骤
  • 1)主将更改操作记录到binlog里
  • 2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里
  • 3)从根据relaylog里面的sql语句按顺序执行
 
主从共有3个线程:
  • 主上有一个log dump线程,用来和从的I/O线程传递binlog
  • 从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句执行
 
主从原理图
当有写入操作时,会记录到Master的binlog里面,主上(Master)的log dump 线程会和从上(Slave)的I/O线程相互通信;从上将binlog信息读到Slave,生成一个Relaylog中继日志;从上的SQL线程将Relaylog里面的sql语句执行
 
主从应用场景:
1、做数据备份;主机器宕机,可以启动从机器,给web、客户端提供服务。
2、不仅做数据备份,还要作为读库,让web、客户端从从机器读取数据,减缓主机器读取压力
 
 
17.2 准备工作
准备两台机器,都要有mysql服务
###注意,进行主从配置同步操作时一定要保持两边数据一致
 
17.3 配置主
一、安装mysql
 
二、修改my.cnf,增加server-id=150和log_bin=xin1
vim /etc/my.cnf
server-id=150
log_bin=xin2
 
三、修改完配置文件后,启动或者重启mysqld服务
/etc/init.d/mysqld restart
 
四、把mysql库备份并恢复成xin库,作为测试数据
mysqldump -uroot -p123456 mysql > /tmp/mysql.sql
mysql -uroot  -p123456 -e "create database xin"
mysql -uroot -p123456 xin < /tmp/mysql.sql
 
五、创建用作同步数据的用户
grant replication slave on *.* to 'repl'@slave_ip identified by 'password';
#slave_ip为从机器的ip
grant replication slave on *.* to 'repl'@192.168.233.129 identified by '123456';
 
flush tables with read lock;    
#锁表,防止表继续写入
 
show master status;
#查看binlog的位置和数值,需要记住,待会要用到
 
 
17.4 配置从
一、安装mysql
 
 
二、编辑my.cnf,配置server-id=129,(要求和主上不一样,且从上没有binlog日志)
vim /etc/my.cnf
server-id=129
 
 
三、修改完配置文件后,启动或者重启mysqld服务
/etc/init.d/mysqld restart
 
四、把主上xin库同步到从上
scp  192.168.233.150:/tmp/*.sql  /tmp/
[root@xinlinux-01 ~]# scp  192.168.233.150:/tmp/*.sql  /tmp/
root@192.168.233.150's password:
xin.sql                                        100%  649KB   8.6MB/s   00:00
zrlog.sql                                      100% 9863     1.9MB/s   00:00
 
五、可以先创建xin库,然后把主上的/tmp/mysql.sql拷贝到从上,然后导入xin库
mysql -uroot
create database xin;
create database zrlog;
mysql -uroot xin <  /tmp/xin.sql
mysql -uroot zrlog <  /tmp/zrlog.sql
 
六、实现主从同步
mysql -uroot 
stop slave;
 
change master to master_host='', master_user='repl', master_password='', master_log_file='', master_log_pos=xx;
#master_host为主机器ip,msaster_pasword为主机器密码,master_log_file为binlog日志名称,master_log_pos为binlog日志数值
 
change master to
master_host='192.168.233.150',master_user='repl',master_password='123456',master_log_file='xin2.000002',master_log_pos=665019;
 
 
start slave;
 
#判定主从是否配置成功
show  slave status\G
 
查看主从同步是否正常
1、查看Slave_IO_Running和Slave_SQL_Running是否为yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
 
2、关注是否有error信息
Seconds_Behind_Master: 0  #为主从延迟的时间
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
 
七、还要到主上执行 
unlock tables;        #解锁表
 
 
17.5 测试主从同步
my.cnf配置文件的几个配置参数(主从机器都可配置)
主服务器上
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=  #忽略指定库,可用通配符%(常用)
 
 
测试主从
主上操作
 mysql -uroot  -p123456;
use xin;
show tables;
select count(*)  db;
mysql> select count(*)  db;
+----+
| db |
+----+
|  1 |
+----+
1 row in set (0.06 sec)
 
从上操作
 mysql -uroot
use xin;
select count(*)  db;
mysql> select count(*)  db;
+----+
| db |
+----+
|  1 |
+----+
 
对比可知主从的数据完全一样,限制开始对主机器的数据进行操作,查看从机器是否同步操作的数据
主上操作清空db表数据
truncate table db;
select * from  db;
mysql> select * from  db;
Empty set (0.00 sec)
 
从上操作
select * from  db;
mysql> select * from  db;
Empty set (0.00 sec)
#发现从机器的db表数据清空了
 
主上继续操作
drop table db;
 
从上查看wp_users表
select count(*)  db;
 
如果不小心对从机器进行的误删等操作导致主从机器不一致:
1、可以先stop slave,再start slave;查看slave show slave status 两个yes是否在;
 
2、如果还是不行,就需要在从机器重新配置主从同步(前提是要保持数据一致)
stop slave;
 
change master to master_host='', master_user='repl', msaster_pasword='', master_log_file='', master_log_pos=xx;
 
start slave;
 
 
17.6扩展
#如果遇到主从不能正常同步,提示uuid相同的错误。这是因为克隆机器导致。
 
不停库不锁表在线主从配置
 
主从不同步
 
 
 
主主
 
mysql-proxy 实现读写分离
 
mysql-proxy类似的产品有:
mycat  基于阿里的开源软件cobar,官网 www.mycat.io
 
 
mycat实现分库分表  
 
atlas   出自于360,不维护不更新了  https://blog.csdn.net/AnPHPer/article/details/80566385
 
mysql环形主从
 
 
MHA架构
 
比较复杂的mysql集群架构 http://ask.apelearn.com/question/17026
 
 
17.7课堂笔记
一、NFS
案例:nfs服务端连接了很多的nfs客户端,修改了nfs服务端的配置直接重启rpcbind服务途中导致一个php网站的nfs客户端访问不了nfs服务端,用户访问网页一直加载不了网页在等待,nfs客户端出现大量php进程请求,导致磁盘占用高
 
解决方法:在重启rpcbind服务前,将客户端挂载的nfs先卸载掉;这样即使用户访问不了界面也不需要等待,会返回404错误,客户端的磁盘占用也不会高
 
 
二、FTP
#安装purl-ftpd前需要安装epel扩展源
 
 
三、Tomcat
基础概念:
JAVAEE   Java Plateform  Enterprise  Edition  企业版本  用来做网站的
JAVAEE   Java Plateform  Standard  Edition    标准版本  用来做电脑运行的软件的
JAVAEE   Java Plateform  Micro   Edition    微型版本  做手机软件的  
 
JDK  Java  Development  kit  java的开发环境  JDK=java开发工具+JRE
 
JRE  Java  Runtime  Environment  java程序的运行环境,包含java运行所需要的类库和LVM
 
LVM   java虚拟机
 
server 和jsp
编写java web网站的
在html代码中内嵌java代码就是jsp,而servlet是纯jsp代码写的
jsp主要用来展现页面效果,而servlet主要负责逻辑控制
用户第一次运行jsp时,会自动转换为servlet代码,所以说jsp本质上是一种servlet
第一次访问servlet时,会将其编译为类文件,后续可以直接访问类文件。
要想使用servlet必须把它放在特定的位置,而且西药对其配置,jsp放到哪里都可以(webapps下),不需要配置。
 
tomcat、JDK、java web应用三者关系
tomcat是允许并java web应用的一个中间件,比如要运行一个java的网站,需要安装tomcat,就像运行PHP网站需要安装php。简单说,jsp程序需要解析需要tomcat。
而tomcat是用java开发的一款软件,要想让tomcat运行起来,需要一个运行环境,JDK就是给tomcat提供这个运行环境的。
 
 
四、tomcat 8005端口启动慢解决方法
编辑$JAVA_HOME/jre/lib/security/java.security,将"securerandom.soure=file:/dev/random"的/dev/random改为"/dev/urandom"
 
$JAVA_HOME的位置:
如果是openjdk(yum安装的),在/usr/lib/jvm/
如果是下载的二进制包,就在jdk主目录(如:/usr/local/jdk_1.8)
 
 
五、普通用户启动tomcat
#1024以内的端口都必须用root用户才能启动,通普通用户身份启动不了
1、创建普通用户
useradd tomcat
 
2、修改tomcat目录属主
chown -R tomcat /usr/local/tomcat
 
3、启动tomcat
  • su -c "/usr/local/tomcat/bin/startup.sh" tomcat
  • 或者先登录普通用户,然后运行启动命令
 
4、关闭tomcat
su -c "/usr/local/tomcat/bin/shutdown.sh"  tomcat
 
#注意:用普通用户启动tomcat,监听端口不能使80,因为80必须以root身份监听
 
 
六、tomcat目录介绍
  • bin:主要存放脚本文件,例如常用的windows和linux系统中刚启动和关闭脚本
  • conf:主要存放配置文件,其中个最重要的两个配置文件是server.xml和web.xml
  • lib:主要存放tomcat运行所依赖的包
  • LICENSE:版权许可证,软件版权信息及适用方位等信息
  • logs:主要村翁运行时产生的日志文件,例如catalina.out、catalina.(date).log等
  • NOTICE:通知信息,一些软件的所属信息和地址等
  • RELEASE-NOTES:发布说明,包含一些版本升级功能点
  • RUNNING.txt:运行说明,必需的运行环境等信息
  • temp:存放tomcat运行时产生的临时文件,例如开启了缓存的应用城西,会在该目录下生成一些文件
  • webapps:部署web应用程序的默认目录,也就是war包所在默认目录
  • work:主要存放有jsp文件生成的servlet(java文件以及最终编译生成的class文件)
 
 
七、tomcat配置文件
 
 
八、重定向web应用程序目录
#在一台服务器上tomcat跑多个端口
 
1、创建实例目录
mkdir -p /data/tomcat-instance
mkdir /data/tomcat-instance/www.123.com
cd !$
cp -r /usr/local/tomcat/conf   /data/tomcat-instance/www.123.com
 
2、创建tomcat服务相关目录
mkdir -p   /data/tomcat-instance/www.123.com/{common,logs,temp,server,shared,webapps,work}
 
3、创建启动和关闭脚本
 
4、配置编辑文件
vim /data/tomcat-instance/www.123.com/conf/server.xml
#修改三个端口,目的是为了不和其他实例冲突
课堂笔记
一、NFS
案例:nfs服务端连接了很多的nfs客户端,修改了nfs服务端的配置直接重启rpcbind服务途中导致一个php网站的nfs客户端访问不了nfs服务端,用户访问网页一直加载不了网页在等待,nfs客户端出现大量php进程请求,导致磁盘占用高
 
解决方法:在重启rpcbind服务前,将客户端挂载的nfs先卸载掉;这样即使用户访问不了界面也不需要等待,会返回404错误,客户端的磁盘占用也不会高
 
 
二、FTP
#安装purl-ftpd前需要安装epel扩展源
 
 
三、Tomcat
基础概念:
JAVAEE   Java Plateform  Enterprise  Edition  企业版本  用来做网站的
JAVAEE   Java Plateform  Standard  Edition    标准版本  用来做电脑运行的软件的
JAVAEE   Java Plateform  Micro   Edition    微型版本  做手机软件的  
 
JDK  Java  Development  kit  java的开发环境  JDK=java开发工具+JRE
 
JRE  Java  Runtime  Environment  java程序的运行环境,包含java运行所需要的类库和LVM
 
LVM   java虚拟机
 
server 和jsp
编写java web网站的
在html代码中内嵌java代码就是jsp,而servlet是纯jsp代码写的
jsp主要用来展现页面效果,而servlet主要负责逻辑控制
用户第一次运行jsp时,会自动转换为servlet代码,所以说jsp本质上是一种servlet
第一次访问servlet时,会将其编译为类文件,后续可以直接访问类文件。
要想使用servlet必须把它放在特定的位置,而且西药对其配置,jsp放到哪里都可以(webapps下),不需要配置。
 
tomcat、JDK、java web应用三者关系
tomcat是允许并java web应用的一个中间件,比如要运行一个java的网站,需要安装tomcat,就像运行PHP网站需要安装php。简单说,jsp程序需要解析需要tomcat。
而tomcat是用java开发的一款软件,要想让tomcat运行起来,需要一个运行环境,JDK就是给tomcat提供这个运行环境的。
 
 
四、tomcat 8005端口启动慢解决方法
posted @ 2018-10-15 21:14  最爱吃菜  阅读(196)  评论(0编辑  收藏  举报