MySQL

1.主从复制

在MySQL中建立表

在MySQL2中查看

2.MySQL主从集群的slave添加及延迟回放

建立新的MySQL3虚拟机

2.1拉平数据(要锁数据,实验环节没锁,生产环境需要锁)

sql 复制代码
[root@mysql ~]# mysqldump -uroot -p timinglee > timinglee.sql
[root@mysql ~]# scp timinglee.sql root@172.25.254.30:/mnt/
[root@mysql3 ~]# cd /mnt/
[root@mysql3 mnt]# ls
timinglee.sql
恢复数据
建立库
[root@mysql3 mnt]# mysql -uroot -p123 -e "create database timinglee;"
[root@mysql3 mnt]# mysql -uroot -p123 timinglee < timinglee.sql

在MySQL3中配置slave

sql 复制代码
mysql> change master to master_host='172.25.254.100',master_user='repl',master_password='123',master_log_file='mysql-bin.000002',master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.03 sec)
mysql> slave start;
检查 :       Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.25.254.100
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql3-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

2.2测试一主两从,在主中加入数据

mysql> insert into timinglee.userlist values('user2','123');

在两从中查看数据

MySQL2中:mysql> select * from timinglee.userlist;

+----------+----------+

| username | password |

+----------+----------+

| lee1 | 123 |

| user2 | 123 |

+----------+----------+

2 rows in set (0.00 sec)

MySQL3中:

mysql> select * from timinglee.userlist;

+----------+----------+

| username | password |

+----------+----------+

| lee1 | 123 |

| user2 | 123 |

+----------+----------+

2 rows in set (0.00 sec)

2.3延迟回放

在slave端中将延迟改为120

sql 复制代码
mysql> stop slave sql_thread;
mysql> change master to master_delay=120;
mysql> start slave sql_thread;
mysql> show slave status\G;
             Master_Info_File: /data/mysql/master.info
                    SQL_Delay: 120
          SQL_Remaining_Delay: NULL

3.慢查询

在主机中做,从机也会有

mysql> set global slow_query_log=on;

mysql> show variables like "slow%";

+---------------------+----------------------------+

| Variable_name | Value |

+---------------------+----------------------------+

| slow_launch_time | 2 |

| slow_query_log | ON |

| slow_query_log_file | /data/mysql/mysql-slow.log |

+---------------------+----------------------------+

3 rows in set (0.00 sec)
查看慢查询时长

mysql> show variables like "long%";

+-----------------+-----------+

| Variable_name | Value |

+-----------------+-----------+

| long_query_time | 10.000000 |

+-----------------+-----------+

1 row in set (0.00 sec)

测试慢查询

mysql> select sleep (10);

+------------+

| sleep (10) |

+------------+

| 0 |

+------------+

1 row in set (10.01 sec)

4.MySQL主从日志的多线程回放

作用:尽量缩小主从数据差异

编辑主配置文件

编辑之后重启MySQL:/etc/init.d/mysqld restart

查看进程

5.MySQL的gitd日志模式

配置文件

[root@mysql ~]# vim /etc/my.cnf

[root@mysql ~]# /etc/init.d/mysqld restart

Shutting down MySQL.. SUCCESS!

Starting MySQL. SUCCESS!

[root@mysql ~]# cat /etc/my.cnf

[mysqld]

datadir=/data/mysql

socket=/data/mysql/mysql.sock

symbolic-links=0

server-id=10

slow_query_log=on

log-bin=mysql-bin

gtid_mode=ON

enforce-gtid-consistency=ON
[root@mysql3 mysql]# vim /etc/my.cnf

[root@mysql3 mysql]# /etc/init.d/mysqld restart

Shutting down MySQL. SUCCESS!

Starting MySQL. SUCCESS!

[root@mysql3 mysql]# cat /etc/my.cnf

[mysqld]

datadir=/data/mysql

socket=/data/mysql/mysql.sock

symbolic-links=0

server-id=30

gtid_mode=ON

enforce-gtid-consistency=ON

查看gtid的状态

在MySQL2和MySQL3中先关闭slave

mysql> stop slave;

Query OK, 0 rows affected (0.00 sec)

在MySQL2和MySQL3中设置

mysql> change master to

-> master_host='172.25.254.100',

-> master_user='repl',

-> master_password='123',

-> master_auto_position=1;

Query OK, 0 rows affected, 2 warnings (0.02 sec)

mysql> start slave;

Query OK, 0 rows affected (0.02 sec)

测试检查:

MySQL1中

MySQL2

MySQL3

6.MySQL的半同步模式

在/etc/my.cnf中开启半同步

[root@mysql ~]# vim /etc/my.cnf

gtid_mode=ON

enforce-gtid-consistency=ON

rpl_semi_sync_master_enabled=1

6.1在MySQL中安装插件

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

查看插件状态

查看半同步状态功能

6.2在slave中开启半同步(MySQL2和MySQL3)

[root@mysql3 ~]# cat /etc/my.cnf

[mysqld]

datadir=/data/mysql

socket=/data/mysql/mysql.sock

symbolic-links=0

server-id=30

gtid_mode=ON

enforce-gtid-consistency=ON

rpl_semi_sync_master_enabled=1

在MySQL中启动

mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;

重启io线程

mysql> STOP SLAVE IO_THREAD;

Query OK, 0 rows affected (0.00 sec)

mysql> START SLAVE IO_THREAD;

Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';

+---------------------------------+-------+

| Variable_name | Value |

+---------------------------------+-------+

| rpl_semi_sync_slave_enabled | ON |

| rpl_semi_sync_slave_trace_level | 32 |

+---------------------------------+-------+

2 rows in set (0.00 sec)

测试:直写正常 模拟故障

在MySQL2和MySQL3关闭IO线程

mysql> STOP SLAVE IO_THREAD;

Query OK, 0 rows affected (0.00 sec)

在MySQL1中写入数据卡住了

之后写入成功

7.MySQL组复制功能的实现(MGR)

因为基于之前实验的主机,为了保证一致性需要清除数据

[root@mysql ~]# rm -fr /data/mysql/*

修改配置文件

之后初始化MySQL

进行MySQL内的修改

mysql> alter user root@localhost identified by 'lee';

Query OK, 0 rows affected (0.00 sec)

mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'lee';

Query OK, 0 rows affected (0.00 sec)

mysql> SET SQL_LOG_BIN=0;

Query OK, 0 rows affected (0.00 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';

Query OK, 0 rows affected (0.00 sec)

mysql> SET SQL_LOG_BIN=1;

Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='lee' FOR CHANNEL

-> 'group_replication_recovery';

Query OK, 0 rows affected, 2 warnings (0.02 sec)

修改三台机子的解析(三台都要加)

将/etc/my.cnf复制到其他两台主机

初始化重启之后进行操作(MySQL2和MySQL3操作相同)

在MySQL主机中查看成员

测试:在MySQL中建立库

mysql> create database timinglee;

Query OK, 1 row affected (0.01 sec)

在MySQL2中查看

在MySQL3中建立表

在MySQL2中查看

8.MySQL路由

安装MySQL-router软件

首先停止MySQL的引用

[root@mysql ~]# /etc/init.d/mysqld stop

Shutting down MySQL. SUCCESS!

修改mysqlrouter的主配置文件

[root@mysql ~]# systemctl start mysqlrouter.service

[root@mysql ~]# netstat -antlupe | grep 7001

tcp 0 0 0.0.0.0:7001 0.0.0.0:* LISTEN 988 47417 4477/mysqlrouter

增加MySQL2和MySQL3的用户(操作相同)

用MySQL登录(200和30轮询)

[root@mysql ~]# mysql -uroot -plee -h172.25.254.100 -P 7001

9.MySQL高可用之MHA

在mha主机中做免密认证

[root@mysql-mha ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.100

[root@mysql-mha ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.200

[root@mysql-mha ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.30

因为基于之前实验的实验机,所以要删掉数据恢复一主两从的状态

下载压缩包文件

[root@mysql-mha MHA-7]# yum install *.rpm -y

将node包发送至节点端

[root@mysql-mha MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.100:/root

[root@mysql-mha MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.200:/root

[root@mysql-mha MHA-7]# scp mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.30:/root

在节点下载node包

yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y

在mha端进行操作

[root@mysql-mha MHA-7]# cd mha4mysql-manager-0.58/

[root@mysql-mha mha4mysql-manager-0.58]# cd samples/

[root@mysql-mha samples]# cd conf/

[root@mysql-mha conf]# cat masterha_default.cnf app1.cnf

[root@mysql-mha conf]# cat masterha_default.cnf app1.cnf > /etc/masterha/app1.cnf

[root@mysql-mha conf]# cd /etc/masterha/

[root@mysql-mha masterha]# vim app1.cnf

在mha端修改主配置文件(第二个-s后跟的必须是server里没有的id)

检测网络及ssh

检测主从复制

[root@mysql-mha .ssh]# masterha_check_repl --conf=/etc/masterha/app1.cnf

10.MySQL高可用集群故障迁移

手动切换master

在172.25.254.100上查看master

将100中的mysql停掉的切换

[root@mysql ~]# /etc/init.d/mysqld stop

Shutting down MySQL............ SUCCESS!

在mha主机上切换

查看200的master状态和30的slave

200:

30:

恢复故障节点

先启用100中的MySQL并且开启slave

如果生成锁文件要进行删除锁文件否则会执行失败

删除锁文件再次执行

[root@mysql-mha masterha]# rm -fr app1.failover.complete

查看200中的slave

11.MySQL高可用集群的VIP管理

修改配置文件

[root@mysql-mha ~]# vim /usr/local/bin/master_ip_failover

[root@mysql-mha ~]# vim /usr/local/bin/master_ip_online_change

在100上把vip加上

[root@mysql ~]# ip a a 172.25.254.10/24 dev eth0

检查一主两从的架构

停掉100的mysql服务查看vip

100上的vip消失

200上出现vip

手动恢复后查看vip

相关推荐
Karoku06631 分钟前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
小技与小术2 小时前
数据库表设计范式
数据库·mysql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
Loganer2 小时前
MongoDB分片集群搭建
数据库·mongodb
LKID体2 小时前
Python操作neo4j库py2neo使用之创建和查询(二)
数据库·python·neo4j
刘大浪2 小时前
后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用
数据库·spring boot·mybatis
一只爱撸猫的程序猿2 小时前
简单实现一个系统升级过程中的数据平滑迁移的场景实例
数据库·spring boot·程序员
无敌岩雀2 小时前
MySQL中的索引
数据库·mysql
a_安徒生3 小时前
linux安装TDengine
linux·数据库·tdengine