MYSQL随笔

yum install -y net-tools bash-completion vim lrzsz nc nmap ntpdate tree htop glances telnet unzip iftop iotop rsync
1. tar xf mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz 二进制安装包
2. mv mysql-5.6.40-linux-glibc2.12-x86_64 /usr/local/mysql-5.6.40 移动安装包
3.https://downloads.mysql.com/archives/ 进官网下载 下载mysql
4.mysql-5.6.40.tar.gz mysql版本
5.cd /usr/local/mysql-5.6.40/support-files/
6.cp my-default.cnf /etc/my.cnf
-cp: overwrite ‘/etc/my.cnf’? y
8.cp mysql.server /etc/init.d/mysqld
9.cd /usr/local/mysql-5.6.40/scripts
10.useradd mysql -s /sbin/nologin -M
11. ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
yum install libaio-devel -y



二进制安装MySQL

1)解压
tar xf mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz

2)移动到安装目录
mv mysql-5.6.40-linux-glibc2.12-x86_64 /usr/local/mysql-5.6.40

3)做软连接
ln -s /usr/local/mysql-5.6.40 /usr/local/mysql

4)拷贝启动脚本
cp mysql.server /etc/init.d/mysqld

5)进入初始化目录
cd /usr/local/mysql-5.6.40/scripts

6)创建MySQL用户
[root@elk01 scripts]# useradd mysql -s /sbin/nologin -M

7)安装依赖
yum install libaio-devel -y

8)初始化
[root@elk01 scripts]# ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

9)授权
[root@elk01 scripts]# chown -R mysql.mysql /usr/local/mysql*


mysql客户端指令:

 

 

Btree

B +tree:
优点:1、 优化范围查询
2、 在叶子节点添加相邻节点的指针


 

 

mysql索引 https://www.driverzeng.com/zenglaoshi/668.html

 


mysql innodb搜索引擎 https://www.driverzeng.com/zenglaoshi/689.html
一个网站架构:两种
1、LNMP
linux NGINX MySQL php
2、LAMT
Linux Apache MySQL tomcat

 

在没有备份数据的情况下,突然断电导致表损坏,打不开数据库。
1、找开发要以前的表语句
CREATE TABLE `city` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Name` char(35) NOT NULL DEFAULT '',
`CountryCode` char(3) NOT NULL DEFAULT '',
`District` char(20) NOT NULL DEFAULT '',
`Population` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`),
KEY `CountryCode` (`CountryCode`),
KEY `idx_city` (`Population`,`CountryCode`),
) ENGINE=InnoDB AUTO_INCREMENT=4080 DEFAULT CHARSET=latin1;

2、在新库中创建表
3、删除独立表空间文件
mysql> alter table city_new discard tablespaces;
4、拷贝旧表空间文件到新表空间
[root@db01 world]# cp /data/3307/data/world/city.ibd /data/3307/data/world/city_new.ibd
5、导入表空间
mysql> alter table city_new import tablespace;

PS:可能会碰到权限问题
解决: 在导入之前授权
[root@db01 world]# chown -R mysql.mysql *

------------------------day03-----------------------------------------

前戏:

架构师的工作:
-怎样保证网站的访问速度比较快
-怎样保证网站服务器24小时不间断提供服务

负债均衡
-通过一个IP端口绑定机群,
-请求来了后通过(哈希...)算法平均分配(轮询分配)给机群下面的服务器,
-常见的用 Nginx、LVS\HAproxy
-Nginx:
-处理前端静态页面
-同时负责与后端交互
老曾的网站架构:
高可用:
作用
-作为一个热备;一旦负载均衡的服务器宕机了就 启用它
-保证网站不间断,


正题:

主从复制:
-提高并发
-减轻主库压力
-负载均衡

主库开启binlog:
binlog3种工作模式:
1、语句模式
2、行级模式
3、混合模式:mixed

主从复制的先决条件:
1、要有两个以上的实例
2、开启server_id
主库server_id = 5
从库server_id = 5
从库之间server_id可以相同吗? 可以
3、主库上要有主从复制用户
4、主库要开启bing
binlog3种工作模式:
1、语句模式:statment (默认)
2、行级模式 :row (企业常用)
3、混合模式:mixed

5、两个实例数据保持一致
-在binlog之前来一次全备

PS:从库机必须手动开启同步
- start slave;
-这样才能时时同步主库

命令 ecgo $? 查看上一条命令是否执行成功
-成功 0
-失败: 不为 0


企业截取数据的标准语句:
[root@elk01 data]# mysqldump -uroot -p1 -A -R --triggers --master-data=2 --single-transaction|gzip > /tmp/full_$(date +%F).sql.gz
参数意义:
--master-data=2
-有三个参数 1 、2 、 3
1 表示 显示注释
2 表示 不显示注释
0 表示 关闭功能

在虚拟机1中

使用语句模式恢复数据
#修改配置文件
1、[root@oldboy etc]# vim my.cnf
- log-bin=mysql-bin

#重启mysql
2、[root@oldboy ~]# /etc/init.d/mysqld restart

#记录位置点
3、[root@oldboy ~]# mysql -uroot -p1
-mysql> creatr database binlog;
-mysql> use binlog
-mysql> create table binlog(id int);
-insert into binlog values(1),(2),(3);
-mysql> show master status; 查看位置点

4、[root@oldboy ~]# cd /usr/local/mysql/data/
-查看
-mysqlbinlog mysql-bin.000001

删库后使用 位置点 恢复:
5、[root@oldboy ~]# mysql -uroot -p1
-mysql> use binlog
-mysql> show tables;
-drop table binlog;
-\q

截取 起始位 和 终止位
6、[root@oldboy ~]# cd /usr/local/mysql/data/
-[root@oldboy data]# mysqlbinlog mysql-bin.000001
-起始位 和 终止位
-[root@oldboy data]# #220 553
-[root@oldboy data]# mysqlbinlog --start-position=220 --stop-position=553 mysql-bin.000001

7、导入文件
-[root@oldboy data]# mysqlbinlog --start-position=220 --stop-position=553 mysql-bin.000001 > /tmp/binlog.sql

8、恢复数据库
-[root@oldboy data]# mysql -uroot -p1 < /tmp/binlog.sql
#查看
-[root@oldboy data]# mysql -uroot -p1
-mysql> use binlog
-mysql> show tables;
-mysql> select * from binlog;
-完成
-----------------------------------------

使用行级模式恢复数据:
1、[root@oldboy data]# cd /etc
2、[root@oldboy etc]# vim my.cnf
-binlog_format=row

#重启mysql
3、[root@oldboy ~]# /etc/init.d/mysqld restart

#连接MYsql
4、[root@oldboy etc]# mysql -uroot -p1

记录位置点
5、mysql> show master status;
-可以看到
变为新的对象: mysql-bin.000002

#创建数据库并插入数据
6、 mysql> create database row;
-mysql> use row
-mysql> insert row values(1),(2),(3);

修改数据
7、mysql> update row set id=10 where id=2;
-mysql> select * from row;

删除数据(模拟误操作)
8、mysql> delete from row where id=3;
删表
-mysql> drop table row;
删库
-mysql> drop database row;

现在有三种状态:1、1 2 3; 2、1 10 3 ; 3、1 10
例如恢复第二种 1 10 3 的状态:

10、查看起始位 和 终止位
-[root@oldboy ~]# cd /usr/local/mysql/data/
-[root@oldboy data]# mysqlbinlog mysql-bin.000002

11、截取 起始位 和 终止位 并导入文件
-[root@oldboy data]# mysqlbinlog --start-position=120 --stop-position=697 mysql-bin.000002 > /tmp/row.sql

12、恢复
-[root@oldboy ~]# mysql -uroot -p1
-mysql> source /tmp/row.sql
13、查看结果:
-mysql> show databases;
-mysql> use row;
-mysql> show tables;
-mysql> select * from row;


-----------------主从复制操作--(数据不一致)---------------------------
1、开启两个实例
分别为: a1 、a2

2、设a1为主库,a2为从库

3、修改配置文件
-在a1中
-1、[root@oldboy ~]# cd /etc
-2、[root@oldboy etc]# vim my.cnf
-[mysqld]下:
log-bin=mysql-bin
binlog_format=row
server_id=51
-3、[root@oldboy ~]# /etc/init.d/mysqld restart

-在a2中
-1、[root@oldboy ~]# cd /etc
-2、[root@oldboy etc]# vim /etc/my.cnf
-[mysqld]下:
-server_id =52
-3、[root@oldboy ~]# /etc/init.d/mysqld restart

4、记录位置点:
-在a1中
-1、记录为支点
mysql> show master status;
-2、创建主库用户
- mysql> grant replication slave on *.* to rep@'%' identified by '123';

5、在从库中:
登录mysql数据库
mysql
#先执行
change master to
#再一个个执行:
#主库IP
master_host='10.0.0.51',
#主库用户名
master_user='rep',
#主库用户密码
master_password='123',
#主库位置点
master_log_file='mysql-bin.000003',
#主库位置点 起始位置
master_log_pos=120;

------------快捷---------------
change master to
master_host='10.0.0.51',
master_user='rep',
master_password='123',
master_log_file='mysql-bin.000001',
master_log_pos=120;
-------------------------------

PS:可能会碰到问题---主库位置点不正确
-解决:
-stop slave;
-reset slave;
#更改主库位置点 ,主库位置点 起始位置
-change master to master_log_file='mysql-bin.000005(正确的)',master_log_pos=686;
-start slave;
-show slave status\G

开启slave
6、mysql> start slave; 开启IO线程 和SQL线程
查看slave
7、mysql> show slave status\G
可能碰到的错误:
1、IO线程是No(Slave_IO_Running: No)
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

这种情况有两种解决方法:
1、 在主从库中:
删除 主从库 auth.cnf
#切换目录
-[root@oldboy ~]# cd /usr/local/mysql/data
#删除
-[root@oldboy data]# rm -fr auto.cnf
#重启mysql
-[root@oldboy data]# /etc/init.d/mysqld stop
-[root@oldboy data]# /etc/init.d/mysqld start
#重新连接mysql
-[root@oldboy data]# mysql -uroot -p1

在从库中:
重启slave:
-mysql> stop slave;
-mysql> start slave;
-mysql> show slave status\G

2、修改/usr/local/mysql/data/auto.cnf 下的 UUID
-只要UUID不一样就行了。
-本质上和 第1中方法差不多,删除auto.cnf 后 重启mysql 会自动生成以个auto.cnf且里面UUID不一样。

2、IO线程是 Connecting
Last_IO_Error: Last_IO_Error: error connecting to master 'rep@10.0.0.11:3306' - retry-time: 60 retries: 17

下面三个方法只要有一个报错都会导致线程IO是NO
解决方法:
一个个的试:
1.ping 主库IP
2.telnet 主库ip 主库端口
3.mysql -urep -p123 -h10.0.0.11
-可能碰到的错误:
#用户@主机名 而不是IP
-rep@'10.0.0.11'(password:YES) 这是 反向解析错误
-解决方法:
在配置文件中:
-vim /etc/my.cnf
-在[mysqld]下加上:
-skip-name-reseolve 跳过反向解析


-全部ping通之后重新执行第5步,不过 参数 的变成比 ping通 的数据

-输完改正获得数据后执行
先关闭slave
-stop slave;
在开启slave
-start slave;
查看
-mysql> show slave status\G

-完成。
PS:配置多个从库只需在新的从库中修改server-id就可以了
-之后从库连主库使用 主从库用户:
-[root@oldboy ~]# mysql -urep -p123 -h 10.0.0.11


保证主从复制--主从库的数据一致:
PS:从库机必须手动开启同步
- start slave;
-这样才能时时同步主库

-1、在binlog之前 做一次全备!!! ------解决主库数据多余从库的问题

-全备操作:
#在主库中
-[root@oldboy ~]# mysqldump -uroot -p1 -A --master-data=2 > /tmp/full.sql
-[root@oldboy ~]# scp /tmp/full.sql 172.16.1.13:/tmp
-确认:yes
-密码:1
#在从库中:
-1、mysql> stop slave;
-2、mysql> source /tmp/full.sql

-3、[root@oldboy ~]# vim /tmp/full.sql
#拿到位置点
-CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000013', MASTER_LOG_POS=120;
-4、mysql> reset slave;

-5、mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000013', MASTER_LOG_POS=120;
-6、mysql> start slave;
-7、mysql> show slave staus\G
-成功后可以看到:
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000013
Slave_IO_Running: Yes

这个时候主库不管写什么从库都会同步过去!!!(完成一个非常常见的主从复制)

2、解决从库数据多余主库数据

-解决思路:
-把多余的数据删掉!!!

-想彻底删除可以 初始化数据库

-初始化数据库:
#停止数据库
-/etc/init.d/mysqld stop
删除data目录
-cd /usr/local/mysql
-rm -fr data/
-cd scripts/
#初始化数据库
-./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
#重启mysql
-/etc/init.d/mysqld start
完成。。。
查看新库
-mysql
-show databases;

-现在想做主从
-source /tem/full.sql
查看
-show databases;
这个时候和主库数据一模一样
-开启change
-change master to
#主库IP
master_host='10.0.0.11',
#主库用户名
master_user='rep',
#主库用户密码
master_password='123',
#主库位置点
master_log_file='mysql-bin.000003',
#主库位置点 起始位置
master_log_pos=120;
-start slave;
-show slave status\G
完成。。。。

延迟从库:
在从库中:
-开启mysql
-stop slave;
#设置延迟180
-mysql> change master to master_Delay=180;
-mysql> start slave;
-mysql> show slave status\G
-关闭延迟:
-stop slave;
#设置延迟0
-mysql> change master to master_Delay=0;
-mysql> start slave;
-mysql> show slave status\G

过滤复制


部署MHA:
MHA的先决条件:
-1、做好主从复制,不能多实例,不能过滤复制
-主从复制的先决条件:
-主库:
-1、开启server_id
-2、添加server_id
-3、添加主从复制用户
-4、查看master status

-从库:
-1、添加server_id
-和主库不同,从库之间也不能相同
-2、从库也要开启binlog
-3、从库也要有主从复制用户
-2、
#IP地址
-[root@mysql-db01 ~]# hostname -I
-10.0.0.51
MHA的部署开始:
作用:当Master出现故障时,它可以自动将最新数据的Slave提升为新的Master,然后将所有其他的Slave重新指向新的Master。
1、导入安装包:
-dao03中的4个
- .rpm ---- 是yum安装的
- .gz ----- 是源码包
2、解压:
(1)Manager工具包
-[root@oldboy ~]# tar xf mha4mysql-manager-0.56.tar.gz
查看
-[root@oldboy ~]# cd /root/mha4mysql-manager-0.56/bin
(2)Node工具包
-[root@oldboy ~]# tar xf mha4mysql-node-0.56.tar.gz
查看
-[root@oldboy ~]# ll /root/mha4mysql-node-0.56/bin/
3、先决条件:
-主库:
-[root@oldboy bin]# mysql -uroot -p1
-mysql> set global relay_log_purge = 0;
-mysql> \q
-[root@oldboy ~]# vim /etc/my.cnf
-relay_log_purge = 0


-从库:
-[root@oldboy ~]# mysql
-mysql> set global relay_log_purge = 0;
-mysql> set global read_only=1;
-[root@oldboy ~]# vim /etc/my.cnf
-relay_log_purge = 0
4、部署MHA
查看mysql日志:
在/usr/local/mysql/data/oldboy.err
[root@oldboy data]# cat oldboy.err
-1、先安装依赖:
网速慢可以换源:
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
#主从库都要装
-1、[root@elk01 ~]# yum localinstall -y mha4mysql-node-0.56-0.el6.noarch.rpm

#只装一个从库(第二个从库)
-2、[root@oldboy ~]# yum localinstall -y mha4mysql-manager-0.56-0.el6.noarch.rpm

----------------安装完所有插件与依赖--------------------
-2、主库:
-[root@oldboy ~]# mysql -uroot -p1
-mysql> grant all privileges on *.* to mha@'10.0.0.%' identified by 'mha';

-3所有从库:
1、[root@oldboy ~]# vim /etc/my.cnf
[mysqld]
-skip-name-resolve (反向解析)
-log-bin=mysql-bin
-binlog_format=row
2、重启mysql
-[root@oldboy ~]# /etc/init.d/mysqld restart
3、进入mysql
-mysql> set global read_only=1;
#主从库都执行:
-4、[root@oldboy ~]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
-5、[root@oldboy ~]# ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
查看结果:
-[root@oldboy ~]# ll /usr/bin/mysql*
应该全部为绿色

#只在安装了manager的从库中执行
-6、设置配置文件
-[root@oldboy ~]# mkdir /etc/mha
-[root@oldboy ~]# vim /etc/mha/app1.cnf
[server default]
manager_log=/var/log/mha/app1/manager.log (日志文件)
manager_workdir=/var/log/mha/app1 (工作目录)
master_binlog_dir=/usr/local/mysql/data (指定你的mysql的binlog目录)
user=mha (创建的manager的管理用户)
password=mha (用户密码)
ping_interval=2 (特殊的ping,2秒检测一次主库心跳,默认3秒)
repl_password=123 (主从库密码)
repl_user=rep (主从库用户)
ssh_user=root

[server1] (从库标签)
hostname=10.0.0.51 (从库IP,如果是阿里云就自己改一下)
port=3306

[server2]
hostname=10.0.0.52
port=3306

[server3]
hostname=10.0.0.53
port=3306
#配置ssh信任,(主从库都要执行)
-7、创建秘钥对
-[root@oldboy ~]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1
-8、发送公钥,发送给所有人,包括自己
#三台机器都运行一遍(选 yes,密码是系统密码 1)
-ssh-copy-id -i /root/.ssh/id_dsa.pub root@10.0.0.51
-ssh-copy-id -i /root/.ssh/id_dsa.pub root@10.0.0.52
-ssh-copy-id -i /root/.ssh/id_dsa.pub root@10.0.0.53
-查看
#看能否ping通
ssh 10.0.0.51
ssh 10.0.0.52
ssh 10.0.0.53
-9、在安装了manager的从库
-cd /root/.ssh/
-[root@oldboy .ssh]# masterha_check_ssh --conf=/etc/mha/app1.cnf
-[root@oldboy .ssh]# masterha_check_repl --conf=/etc/mha/app1.cnf
结果:
MySQL Replication Health is OK.
表示成功
在安装了manager的从库
-10、启动MHA
-[root@oldboy .ssh]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
-[root@oldboy .ssh]# masterha_check_status --conf=/etc/mha/app1.cnf
这种情况等一下,在执行一遍!!!
-app1 monitoring program is now on initialization phase(10:INITIALIZING_MONITOR). Wait for a while and try checking again.

成功:
-app1 (pid:8470) is running(0:PING_OK), master:10.0.0.51

MHA高可用功能测验;
在安装了manager的从库
-1、[root@oldboy .ssh]# tail -f /var/log/mha/app1/manager.log

-2、让主库挂掉
-2、[root@oldboy ~]# /etc/init.d/mysqld stop

-3、你会看到从库一直2s的测一次....最后它会把主库切换掉
-查看切换后的主库
运行到这里阻住:
-10.0.0.52(10.0.0.52:3306): Resetting slave info succeeded.
-Master failover to 10.0.0.52(10.0.0.52:3306) completed successfully.

-ctrl + c 出来
-[root@oldboy ~]# mysql
-mysql> show slave status\G
结果改变:
-Master_Host: 10.0.0.52
PS:配置文件详解:
[server default]
#设置manager的工作目录
manager_workdir=/var/log/masterha/app1
#设置manager的日志
manager_log=/var/log/masterha/app1/manager.log
#设置master 保存binlog的位置,以便MHA可以找到master的日志,我这里的也就是mysql的数据目录
master_binlog_dir=/data/mysql
#设置自动failover时候的切换脚本
master_ip_failover_script= /usr/local/bin/master_ip_failover
#设置手动切换时候的切换脚本
master_ip_online_change_script= /usr/local/bin/master_ip_online_change
#设置mysql中root用户的密码,这个密码是前文中创建监控用户的那个密码
password=123456
#设置监控用户root
user=root
#设置监控主库,发送ping包的时间间隔,尝试三次没有回应的时候自动进行failover
ping_interval=1
#设置远端mysql在发生切换时binlog的保存位置
remote_workdir=/tmp
#设置复制用户的密码
repl_password=123456
#设置复制环境中的复制用户名
repl_user=rep
#设置发生切换后发送的报警的脚本
report_script=/usr/local/send_report
#一旦MHA到server02的监控之间出现问题,MHA Manager将会尝试从server03登录到server02
secondary_check_script= /usr/local/bin/masterha_secondary_check -s server03 -s server02 --user=root --master_host=server02 --master_ip=192.168.0.50 --master_port=3306
#设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机放在发生脑裂,这里没有使用)
shutdown_script=""
#设置ssh的登录用户名
ssh_user=root

[server1]
hostname=10.0.0.51
port=3306

[server2]
hostname=10.0.0.52
port=3306
#设置为候选master,如果设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个主库不是集群中事件最新的slave。
candidate_master=1
#默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master
check_repl_delay=0


-reset slave all; 重置主从(刷新)

主从复制的原理:
每次读取都会记录一个位置点,下一次再次读取时会先看一下上次读取的位置点,根据上次位置点,每次读取最新的数据
-这样保证了效率(不用每次都从开始读取数据)

TCP/IP缓存
存放点:
relay-log(中继日志)又叫差异日志


--------------------day04-------------------------------

https://www.driverzeng.com/zenglaoshi/709.html

----------第一-----------------
MHA做完切换之后,如何恢复集群?
#原主库中
1.修复旧主库,并启动
[root@elk01 ~]# /etc/init.d/mysqld start

#在安装了manager从库
2.在MHA日志中,找到change master to 语句
[root@elk03 ~]# grep -i 'change master to' /var/log/mha/app1/manager.log |tail -1

##原主库中
3.连接旧主库,并执行change master to 语句
-[root@elk01 ~]# mysql -uroot -p1
-mysql> stop slave;
-mysql> CHANGE MASTER TO MASTER_HOST='10.0.0.52', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=120, MASTER_USER='rep', MASTER_PASSWORD='123';
-mysql> satrt slave;

#在安装了manager从库
4.添加MHA配置文件中的server标签
[root@oldboy ~]# vim /etc/mha/app1.cnf
[server1]
hostname=10.0.0.51
port=3306
#在原来的主库机上
5、验证:
-mysql> show slave status\G

主从复制信息同另一台从机一样
-Slave_IO_Running: Yes
-Slave_SQL_Running: Yes
-------------

VIP漂移的两种方式:
1)通过keepalived的方式,管理虚拟IP的漂移
2)通过MHA自带脚本方式,管理虚拟IP的漂移

通过keepalived的方式配置VIP漂移:
在安装了manager从库
-1、在配置文件中
-[root@oldboy ~]# vim /etc/mha/app1.cnf
-在[server default]下面加入
##使用MHA自带脚本
-master_ip_failover_script=/etc/mha/master_ip_failover
#下载脚本
-2、放在 cd /etc/mha/ 下面
- wget http://download.driverzeng.com/master_ip_failover

-3、#根据配置文件中脚本路径编辑
-[root@mysql-db03 ~]# vim /etc/mha/master_ip_failover
#修改以下几行内容
#设置VIP IP
my $vip = '10.0.0.55/24';
my $key = '0';
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";

-4、#在当前主库中绑定vip

-[root@mysql-db01 ~]# ifconfig eth0:0 10.0.0.55/24

#防止脑裂
-PS:eth0:0 绑定这个 那么 配置文件中脚本中
-my $key = '0';
-my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
-my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";

-如果是:eth1:1 绑定这个那么 配置文件中脚本中
-my $key = '1';
-my $ssh_start_vip = "/sbin/ifconfig eth1:$key $vip";
-my $ssh_stop_vip = "/sbin/ifconfig eth1:$key down";

5、#添加执行权限,否则mha无法启动
-[root@mysql-db03 ~]# chmod +x /etc/mha/master_ip_failover

#在当前主库中 重启
6、启动MHA
-[root@oldboy .ssh]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
-[root@oldboy .ssh]# masterha_check_status --conf=/etc/mha/app1.cnf
-#查看是否启动
-ps -ef|grep mha

关于无法启动:
#导致无法启动的原因:
1.脚本权限
2.脚本语法
3.脚本格式
#解决:
1、权限
#查看文件权限
- ll /etc/mha/
#如果没有则添加
-[root@mysql-db03 ~]# chmod +x /etc/mha/master_ip_failover

2、格式:
PS:一般从windows上传的都存在格式问题
#转换格式
-dos2unix master_ip_failover
3、语法:
-#好好检查

测验;
#在安装了manager的从库
-1、[root@oldboy .ssh]# tail -f /var/log/mha/app1/manager.log

-2、#在当前主库中
-2、[root@oldboy ~]# /etc/init.d/mysqld stop

-3、你会看到从库一直2s的测一次....最后它会把主库切换掉
-查看切换后的主库
运行到这里阻住:
-10.0.0.52(10.0.0.52:3306): Resetting slave info succeeded.
-Master failover to 10.0.0.52(10.0.0.52:3306) completed successfully.

4、在绑定的主库中查看IP是否漂移过来
-[root@oldboy scripts]# ifconfig

5、查看库是否漂移的当前主库
-ctrl + c 出来
-[root@oldboy ~]# mysql
-mysql> show slave status\G
结果改变:
-Master_Host: 10.0.0.52
#查看主库ip是否转换成绑定ip

 


MySQL中间件Atlas
#这个安装包不需要管存放目录
安装Atlas
-1、下载安装包
wget httpss://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm
-2、安装
[root@elk01 ~]# rpm -ivh Atlas-2.2.1.el6.x86_64.rpm
-3、查看
[root@elk01 ~]# ll /usr/local/mysql-proxy/
#设置配置文件
-4、设置配置文件
-[root@oldboy conf]# cd /usr/local/mysql-proxy/conf
-[root@oldboy conf]# vim test.cnf

#把密码放在pwds=后面
-使用密码加密工具
例如: 加密 1
-[root@oldboy conf]# ../bin/encrypt 1
返回加密值:Kiu1AJ+oS14=
-[root@oldboy conf]# ../bin/encrypt 123
3yb5jEku5h4=
-[root@oldboy conf]# ../bin/encrypt mha
O2jBXONX098=
-5、拿到
#Atlas监听的管理接口IP和端口
admin-address = 0.0.0.0:2345
-6、启动
-[root@oldboy conf]# /usr/local/mysql-proxy/bin/mysql-proxyd test start

-7模拟操作管理端口
#这里的端口号2345 就是 第5步中拿到的数据
-[root@oldboy conf]# mysql -uuser -ppwd -h127.0.0.1 -P2345

-8、连接成功后看起来像连接MYSQL
-查看可执行命令
-mysql> SELECT * FROM help;
-中文版





-----------------第二-----------------
https://www.driverzeng.com/zenglaoshi/1226.html

Nginx部署

依赖:
#在 /root目录下
[root@elk01 nginx-1.10.3]# yum install -y pcre-devel
[root@elk01 nginx-1.10.3]# yum install -y openssl-devel


安装nginx
#在 /root目录下
#下载nginx源码包
1、wget -c http://nginx.org/download/nginx-1.10.3.tar.gz
#解压
2、[root@elk01 ~]# tar xf nginx-1.10.3.tar.gz
#进入nginx安装目录
2.1、[root@oldboy ~]# cd nginx-1.10.3/
#创建nginx用户
3、[root@elk01 nginx-1.10.3]# useradd nginx -s /sbin/nologin -M

#生成编译文件,开启状态监测模块,开启ssl,开启4层代理模块
4、[root@elk01 nginx-1.10.3]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx-1.10.3/ --with-http_stub_status_module --with-http_ssl_module --with-stream
#编译




-----------------
nginx安装
下载
wget -c https://nginx.org/download/nginx-1.10.3.tar.gz

解压
[root@elk01 ~]# tar xf nginx-1.10.3.tar.gz

#生成编译文件,开启状态监测模块,开启ssl,开启4层代理模块
[root@elk01 nginx-1.10.3]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx-1.10.3/ --with-http_stub_status_module --with-http_ssl_module --with-stream

编译 && 安装
[root@elk01 nginx-1.10.3]# make && make install

做软连接
[root@elk01 nginx-1.10.3]# ln -s /usr/local/nginx-1.10.3 /usr/local/nginx

检查nginx配置文件语法
[root@elk01 nginx-1.10.3]# /usr/local/nginx/sbin/nginx -t

启动nginx
[root@elk01 nginx-1.10.3]# /usr/local/nginx/sbin/nginx
检测是否启动:
-netstat -lntup

重新启动nginx:
#动力配置文件就得重启nginx
#这里的重启不同于mysql,它不会影响用户的体验(不是停了在重启,而是一边运行,一边重启)
-[root@elk01 nginx-1.10.3]# /usr/local/nginx/sbin/nginx -s reload


查看nginx配置文件:
-[root@oldboy nginx-1.10.3]# vim /usr/local/nginx/conf/nginx.conf

-Nginx运用:
1、#把配置文件的所有注释去掉 (的操作)
-[root@oldboy nginx-1.10.3]# grep -Ev "#|^$" /usr/local/nginx/conf/nginx.conf.default > /usr/local/nginx/conf/nginx.conf
-#查看没有注释的页面
- vim /usr/local/nginx/conf/nginx.conf
2、绑定虚拟主机(在nginx配置文件中)

#注意:每次修改都必须重启,生效!!!!!!!

# 修改 localhost 为 TF.wangwangsui.com
-1、server {
listen 80;
server_name TF.wangwangsui.com;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

#检测语法
-2、[root@elk01 nginx-1.10.3]# /usr/local/nginx/sbin/nginx -t
#重启
3、[root@elk01 nginx-1.10.3]# /usr/local/nginx/sbin/nginx -s reload


#绑定hosts(一般绑定DNS,这里绑定host)
4、-先以管理员身份运行CMD
-在输入notepad
-打开 C:/Windows/System32/driver/etc 下面的 hosts文件
-在文末
修改0.0.0.0 account.jetbrains.com
更改为10.0.0.51 TF.wanwansui.com
PS: 配置多个如(以空格为分隔符)
#虚拟机IP 别名1(中间以空格分开) 别名2
10.0.0.51 TF.wanwansui.com TF.haha.com
5、注意:
每个绑定一个端口就加一个server

-实例:绑定前端项目(纯前端)
#主配置文件server下面添加
-1、 include /etc/nginx/conf.d/*.conf; (包含/etc/nginx/conf.d/目录下所有以.conf结尾的文件)
-2、额外创建一个放虚拟主机的目录
-mkdir /etc/nginx/conf.d/
-3、项目配置文件
- cd /etc/nginx/conf.d/
#以域名命名配置文件
-vim www.tfhs.com.cnf
#拷贝主配置文件的server标签
-修改server标签内容 就行了
-文件例如:(#修改成你需要的格式)
-server {
listen 80; //监听端口, 默认80
server_name localhost; //提供服务的域名或主机名

#charset koi8-r; //访问日志

#access_log logs/host.access.log main;

location / { //控制网站访问路径
root html; //存放网站代码路径
index index.html index.htm; //服务器返回的默认页面文件
}
//指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton
error_page 500 502 503 504 /50x.html;
}
...
//第二个虚拟主机配置
'server' {
...
}

include /etc/nginx/conf.d/*.conf; //包含/etc/nginx/conf.d/目录下所有以.conf结尾的文件


部署路飞项目
wget https://files.cnblogs.com/files/pyyu/luffy_boy.zip

wget https://files.cnblogs.com/files/pyyu/07-luffy_project_01.zip

wget https://nodejs.org/download/release/v8.6.0/node-v8.6.0-linux-x64.tar.gz

[root@elk01 opt]# tar xf node-v8.6.0-linux-x64.tar.gz
添加环境变量
[root@elk01 opt]# vim /etc/profile.d/node.sh
export PATH="/opt/node-v8.6.0-linux-x64/bin:$PATH"
加载环境变量
[root@elk01 opt]# source /etc/profile
查看版本信息:
[root@elk01 opt]# node -v
v8.6.0
[root@elk01 opt]# npm -v
5.3.0
解压VUE代码
[root@elk01 opt]# unzip 07-luffy_project_01.zip
进入代码目录
[root@elk01 opt]# cd 07-luffy_project_01/
下载js软件包
[root@elk01 07-luffy_project_01]# npm install
修改api.js文件
[root@elk01 opt]# sed -i 's#127.0.0.1#10.0.0.52#g' /opt/07-luffy_project_01/src/restful/api.js
构建代码
[root@elk01 07-luffy_project_01]# npm run build

编辑配置文件
[root@elk01 07-luffy_project_01]# vim /usr/local/nginx/conf/conf.d/luffy.driverzeng.com.conf
vim /usr/local/nginx/conf/conf.d/luffy.driverzeng.com.conf
server {
listen 80;
server_name luffy.driverzeng.com;
location / {
root /opt/07-luffy_project_01/dist;
index index.html index.htm;
}
error_page 400 403 404 405 /40x.html;
}

[root@elk01 dist]# /usr/local/nginx/sbin/nginx -t
[root@elk01 dist]# /usr/local/nginx/sbin/nginx -s reload

修改hosts解析
10.0.0.51 luffy.driverzeng.com



-----------------------
1.网站域名:www.oldboy.com

2.将自己的静态页项目.部署在/code/oldboy

3.生成日志,在/usr/local/nginx/logs/www.oldboy.com_access.log
---------------------





虚拟机--1
mysql -uroot -p1

 

最后验证:
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
[root@elk03 .ssh]# masterha_check_status --conf=/etc/mha/app1.cnf

 

posted @ 2019-04-24 16:14  萤huo虫  阅读(198)  评论(0编辑  收藏  举报