1、mysql在服务器中的部署
[root@sql10 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql #指定数据目录
socket=/data/mysql/mysql.sock #指定套接字
symbolic-links=0 #数据只能存放到数据目录中,禁止链接到数据目录
A、mysql源码编译安装
10配置
2、mysql的组从复制
B、mysql的组从复制
在slave中查看数据是否有同步过来
a、当有数据时添加slave2
注:生产环境中备份时需要锁表,保证备份前后的数据一致
mysql> FLUSH TABLES WITH READ LOCK;
备份后再解锁
mysql> UNLOCK TABLES;
mysqldump命令备份的数据文件,在还原时先DROP TABLE,需要合并数据时需要删除此语句


#从master节点备份数据
[root@sql10 ~]# mysqldump -uroot -predhat ll > ll.sql
[root@sql10 ~]# scp ll.sql root@172.25.254.30:/mnt/
[root@sql30 ~]# cd /mnt/
[root@sql30 mnt]# ls
ll.sql
[root@sql30 mnt]# mysql -uroot -pll -e "create database ll;"
[root@sql30 mnt]# mysql -uroot -pll ll < ll.sql
b、延迟复制
c、慢查询日志
mysql> SHOW variables like "slow%";
mysql> SET GLOBAL slow_query_log=ON;
mysql> SET long_query_time=4;
mysql> SHOW VARIABLES like "long%";
mysql> SHOW VARIABLES like "slow%";
[root@mysql10 ~]# cat /data/mysql/mysql-node1-slow.log #慢查询日志
mysql> select sleep (10);
[root@mysql10 ~]# cat /data/mysql/mysql-node1-slow.log
3、mysql的并行复制(主从日志多线程回放)
(1)、原理:
(2)、步骤:
a、复制
b、操作
(3)缺陷:
C、mysql的并行复制
slave-parallel-type=LOGICAL_CLOCK #基于组提交,
slave-parallel-workers=16 #开启线程数量
master_info_repository=TABLE #master信息在表中记录,默认记录
在/data/mysql//master.info
relay_log_info_repository=TABLE #回放日志信息在表中记录,默认记录
在/data/mysql/relay-log.info
relay_log_recovery=ON #日志回放恢复功能开启
4、半同步模式
MySQL从5.5开始引入了半同步复制,半同步复制介于异步复制和同步复制之间。主库在提交事务时先等待,必须确认至少一个从库收到了事件(从库将事件写入relaylog,不需要重放和提交,并向主库发送一个确认信息ACK),主库收到确认信息后才会正式commit。与同步复制相比,半同步复制速度快很多,因为他只需要至少1个从库确认写入relaylog,并不需要完成在从库上的事务提交,同时又比异步复制更安全,因为主库在提交时,事务至少已经存在2个地方(主库的binlog和从库的relaylog)。由于半同步复制在提交事务前,需要从库返还确认信息,所以这里涉及到网络的往返通信开销,因此半同步复制只适合在网络条件较好的且地理上距离不远的环境部署,否则可能会因为网络延迟大幅降低主库性能。
半同步复制的特点:
从库在连接主库时需要表明它是否支持半同步复制。
如果主库启用了半同步复制,且有一个支持半同步复制的从库,则主库上事务提交将等待至少一个从库确认已收到事务,或者直到发生超时。
默认只有在将事务写入其中继日志并刷新到磁盘后,主库才会提交事务(也可以配置成提交后等待确认)。
如果没有任何从库确认事务的情况下发生超时,则主库将退化为异步复制。当至少有一个半同步从库赶上时,主库恢复半同步复制。退化与恢复过程都是自动的。
必须在主库和从库上都启用半同步复制,否则使用异步复制。
(1)、gtid模式
D、gtid日志模式
(2)、半同步
E、半同步模式
5、mysql高可用之组复制 (MGR)
(1)、组复制
[root@mysql10 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=1 #配置server唯一标识号
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" #禁用指定存储
引擎
gtid_mode=ON #启用全局事件标识
enforce_gtid_consistency=ON #强制gtid一致
master_info_repository=TABLE #复制事件数据到表中而不记录在数据目录中
relay_log_info_repository=TABLE
binlog_checksum=NONE #禁止对二进制日志校验
log_slave_updates=ON #打开数据库中继,
#当slave中sql线程读取日志后也会写入到自己的binlog中
log_bin=binlog #重新指定log名称
binlog_format=ROW #使用行日志格式
plugin_load_add='group_replication.so' #加载组复制插件
transaction_write_set_extraction=XXHASH64 #把每个事件编码为加密散列
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #通知插件正
式加入
#或创建的组
名
#名称为
uuid格式
group_replication_start_on_boot=off #在server启动时不自动启动组复制
group_replication_local_address="172.25.254.10:33061" #指定插件接受其他成员的信息端口
group_replication_group_seeds="172.25.254.10:33061,172.25.254.20:33061,
172.25.254.30:33061" #本地地址允许访问成员列表
group_replication_ip_whitelist="172.25.254.0/24,127.0.0.1/8" #主机白名单
group_replication_bootstrap_group=off #不随系统自启而启动
group_replication_single_primary_mode=OFF #使用多主模式
group_replication_enforce_update_everywhere_checks=ON #组同步中有任何改变检测更新
group_replication_allow_local_disjoint_gtids_join=1 #放弃自己信息以master事件为主
(2)、组复制的单主和多主模式


F、mysql组复制
[root@sql10 ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
[root@sql20 ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
[root@sql30 ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
[root@sql10 mysql]# rm -rf /data/mysql/*
[root@sql20 mysql]# rm -rf /data/mysql/*
[root@sql30 mysql]# rm -rf /data/mysql/*


[root@sql10 mysql]# /etc/init.d/mysqld start
Starting MySQL SUCCESS!
6、mysql-router(mysql路由)
Mysql路由器可以实现指定端口的读写分离,能够实现读写调度到Mysql组复制集群中的不同后端

G、mysql-router(mysql路由)
7、mysql高可用之MHA
(解决master的单点故障问题)
(1)、组成
(2)、特点
(3)、工作原理
H、mysql高可用集群
在软件中包含的工具包介绍
1.Manager工具包主要包括以下几个工具:
masterha_check_ssh #检查MHA的SSH配置状况
masterha_check_repl #检查MySQL复制状况
masterha_manger #启动MHA
masterha_check_status #检测当前MHA运行状态
masterha_master_monitor #检测master是否宕机
masterha_master_switch #控制故障转移(自动或者手动)
masterha_conf_host #添加或删除配置的server信息
2.Node工具包 (通常由masterHA主机直接调用,无需人为执行)
save_binary_logs #保存和复制master的二进制日志
apply_diff_relay_logs #识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog #去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs #清除中继日志(不会阻塞SQL线程)
[root@sql10 ~]# rm -rf /data/mysql/*
[root@sql20 ~]# rm -rf /data/mysql/*
[root@sql30 ~]# rm -rf /data/mysql/*
[root@sql10 mysql]# mysqld --user=mysql --initialize
[root@sql20 mysql]# mysqld --user=mysql --initialize
[root@sql30 mysql]# mysqld --user=mysql --initialize








[root@sql10 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y
[root@sql20 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y
[root@sql30 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y
[root@sqlmha masterha]# vim app1.cnf[server default]
user=root #mysql管理员用户,因为需要做自动化配置
password=lee #mysql密码
ssh_user=root #ssh远程登陆用户
repl_user=repl #mysql主从复制中负责认证的用户
repl_password=lee #mysql主从复制中负责认证的用户密码
master_binlog_dir= /data/mysql #二进制日志目录
remote_workdir=/tmp #远程工作目录
#此参数使为了提供冗余检测,方式是mha主机网络自身的问题无法连接数据库节点,应为集群之外的主机
secondary_check_script= masterha_secondary_check -s 172.25.254.10 -s
172.25.254.11
ping_interval=3 #每隔3秒检测一次
#发生故障后调用的脚本,用来迁移vip
# master_ip_failover_script= /script/masterha/master_ip_failover
#电源管理脚本
# shutdown_script= /script/masterha/power_manager
#当发生故障后用此脚本发邮件或者告警通知
# report_script= /script/masterha/send_report
#在线切换时调用的vip迁移脚本,手动
# master_ip_online_change_script= /script/masterha/master_ip_online_change
manager_workdir=/etc/masterha #mha工作目录
manager_log=/var/etc/masterha/manager.log #mha日志
[server1]
hostname=172.25.254.10
candidate_master=1 #可能作为master的主机
check_repl_delay=0 ##默认情况下如果一个slave落后master 100M的relay logs的话
#MHA将不会选择该slave作为一个新的master
#因为对于这个slave的恢复需要花费很长时间
#通过设置check_repl_delay=0
#MHA触发切换在选择一个新的master的时候将会忽略复制延时
#这个参数对于设置了candidate_master=1的主机非常有用
#因为这个候选主在切换的过程中一定是新的master
[server2]
hostname=172.25.254.20
candidate_master=1 #可能作为master的主机
check_repl_delay=0
[server3]
hostname=172.25.254.30
no_master=1 #不会作为master的主机
I、 MHA的故障切换
#在master数据节点还在正常工作情况下
[root@sqlmha ~]# masterha_master_switch \
--conf=/etc/masterha/app1.cnf \ #指定配置文件
--master_state=alive \ #指定master节点状态
--new_master_host=172.25.254.20 \ #指定新master节点
--new_master_port=3306 \ #执行新master节点端口
--orig_master_is_new_slave \ #原始master会变成新的slave
--running_updates_limit=10000 #切换的超时时间














J、为MHA添加VIP功能



[root@sql10 ~]# /etc/init.d/mysqld stop
Shutting down MySQL............ SUCCESS!
[root@sql10 ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
[root@sql10 ~]# mysql -uroot -pll
[root@sqlmha masterha]# masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=172.25.254.10 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000