MySQL

1.主从复制

在MySQL中建立表

在MySQL2中查看

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

建立新的MySQL3虚拟机

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

sql 复制代码
[root@mysql ~]# mysqldump -uroot -p timinglee > timinglee.sql
[root@mysql ~]# scp timinglee.sql [email protected]:/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/\* 修改配置文件 ![](https://i-blog.csdnimg.cn/direct/343c3f2fc380431d8c7a0b9e9be3bc01.png) 之后初始化MySQL ![](https://i-blog.csdnimg.cn/direct/8995ad48905a490297ec5f4c9b67ff5e.png) 进行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) ![](https://i-blog.csdnimg.cn/direct/7c3874728efd487abad745ae9812065b.png) 修改三台机子的解析(三台都要加) ![](https://i-blog.csdnimg.cn/direct/fd88fb0d937246e88660ebf888f70253.png) 将/etc/my.cnf复制到其他两台主机 ![](https://i-blog.csdnimg.cn/direct/3971b781dc594585b45ce34db5d1409c.png) 初始化重启之后进行操作(MySQL2和MySQL3操作相同) ![](https://i-blog.csdnimg.cn/direct/6b1c2aade3ef4dfdb7f6434473a4967c.png) 在MySQL主机中查看成员 ![](https://i-blog.csdnimg.cn/direct/160da52c83c24f9f9eb450bea435c6c9.png) 测试:在MySQL中建立库 mysql\> create database timinglee; Query OK, 1 row affected (0.01 sec) 在MySQL2中查看 ![](https://i-blog.csdnimg.cn/direct/0b4333d276a74ce280351220e8d7b691.png) 在MySQL3中建立表 ![](https://i-blog.csdnimg.cn/direct/1821b6b9ecc14739b83ccfd69544231c.png) 在MySQL2中查看 ![](https://i-blog.csdnimg.cn/direct/6d9cd1f2625e42a9a680bf6f9d9862b8.png) ## 8.MySQL路由 安装MySQL-router软件 ![](https://i-blog.csdnimg.cn/direct/ea98daa993b846ffb41ff7c16c907f39.png) 首先停止MySQL的引用 \[root@mysql \~\]# /etc/init.d/mysqld stop Shutting down MySQL. SUCCESS! 修改mysqlrouter的主配置文件 ![](https://i-blog.csdnimg.cn/direct/58527efc71884a9bac0cec0fb6f7bb08.png) \[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的用户(操作相同) ![](https://i-blog.csdnimg.cn/direct/fc92bfb8bdc445c8a93f8d2869c0abd9.png) 用MySQL登录(200和30轮询) \[root@mysql \~\]# mysql -uroot -plee -h172.25.254.100 -P 7001 ![](https://i-blog.csdnimg.cn/direct/981e8ffd0ea843fd9222f11c2f651313.png) ## 9.MySQL高可用之MHA 在mha主机中做免密认证 ![](https://i-blog.csdnimg.cn/direct/c866cd818fb247a086e058562c07d428.png) \[root@mysql-mha \~\]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected] \[root@mysql-mha \~\]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected] \[root@mysql-mha \~\]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected] 因为基于之前实验的实验机,所以要删掉数据恢复一主两从的状态 下载压缩包文件 \[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 [email protected]:/root \[root@mysql-mha MHA-7\]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm [email protected]:/root \[root@mysql-mha MHA-7\]# scp mysql-node-0.58-0.el7.centos.noarch.rpm [email protected]:/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) ![](https://i-blog.csdnimg.cn/direct/53792f8459354f7cae54202fc372d2a6.png) 检测网络及ssh ![](https://i-blog.csdnimg.cn/direct/53dc25ecf3db4c7ca4c12cc095adabeb.png) 检测主从复制 \[root@mysql-mha .ssh\]# masterha_check_repl --conf=/etc/masterha/app1.cnf ## ![](https://i-blog.csdnimg.cn/direct/c5bded4a652e4a019261e662ea18d05e.png)10.MySQL高可用集群故障迁移 手动切换master ![](https://i-blog.csdnimg.cn/direct/3cd5e361dc29403cbbce8b9380193b9a.png) ![](https://i-blog.csdnimg.cn/direct/e2fb86ca46be465b9146a308ea752a80.png) 在172.25.254.100上查看master ![](https://i-blog.csdnimg.cn/direct/a5ab9595afd043328a519c4dc106a733.png) 将100中的mysql停掉的切换 \[root@mysql \~\]# /etc/init.d/mysqld stop Shutting down MySQL............ SUCCESS! 在mha主机上切换 ![](https://i-blog.csdnimg.cn/direct/83a9b40125e04dd798a69d640d874d11.png) ![](https://i-blog.csdnimg.cn/direct/bc1427f9d53a45af96e326988da4735d.png) 查看200的master状态和30的slave 200:![](https://i-blog.csdnimg.cn/direct/39a0ebdc59294090a49fa4a122d8ee6b.png) 30:![](https://i-blog.csdnimg.cn/direct/41fda2bf993a4ad78ff56ec13ee2e847.png) 恢复故障节点 先启用100中的MySQL并且开启slave ![](https://i-blog.csdnimg.cn/direct/ee83c40f41044d2980db5da3872da7e1.png) ![](https://i-blog.csdnimg.cn/direct/882164385496406d8d14e5012dcef6f5.png) 如果生成锁文件要进行删除锁文件否则会执行失败 ![](https://i-blog.csdnimg.cn/direct/73dad799f6bc495e88f074961028a3cc.png) 删除锁文件再次执行 \[root@mysql-mha masterha\]# rm -fr app1.failover.complete ![](https://i-blog.csdnimg.cn/direct/231e80bd0162428fa3e6ff51c0647638.png) ![](https://i-blog.csdnimg.cn/direct/94fcfb0d26cb478db8316df3aa9f5ae3.png) 查看200中的slave ![](https://i-blog.csdnimg.cn/direct/3332954b23204ca2a79247db4fd5e72d.png) ## 11.MySQL高可用集群的VIP管理 ![](https://i-blog.csdnimg.cn/direct/2c6cf610f2d64fb1a5fdf04ba814a1b2.png) 修改配置文件 \[root@mysql-mha \~\]# vim /usr/local/bin/master_ip_failover ![](https://i-blog.csdnimg.cn/direct/48d2ef499ed349ec988c63538ee5951b.png) \[root@mysql-mha \~\]# vim /usr/local/bin/master_ip_online_change ![](https://i-blog.csdnimg.cn/direct/c80f425307e74428b1b671990c042b24.png) 在100上把vip加上 \[root@mysql \~\]# ip a a 172.25.254.10/24 dev eth0 检查一主两从的架构 ![](https://i-blog.csdnimg.cn/direct/dabe289cbbe94129b809d76a57399e47.png) 停掉100的mysql服务查看vip 100上的vip消失 ![](https://i-blog.csdnimg.cn/direct/53e9ff375c8a421ca0347cea7e7c4bb4.png) 200上出现vip ![](https://i-blog.csdnimg.cn/direct/a736305e1e30404ba55f307045c3f8b1.png) 手动恢复后查看vip ![](https://i-blog.csdnimg.cn/direct/69b9e4581a8747b4abe510316d088a6a.png)

相关推荐
银河金融数据库41 分钟前
历史分钟高频数据
数据库·金融
男Ren、麦根1 小时前
MySQL 复制与主从架构(Master-Slave)
数据库·mysql·架构
Stuild Stuil2 小时前
Mysql 字段值批量自增或自减(坐标系数据,(x,y))
java·javascript·mysql
嘉友2 小时前
Redis zset数据结构以及时间复杂度总结(源码)
数据结构·数据库·redis·后端
morganmin2 小时前
(一)MySQL常见疑惑之:select count(*)和select count(1)的区别
数据库·mysql
zhangjin12223 小时前
kettle从入门到精通 第九十四课 ETL之kettle MySQL Bulk Loader大批量高性能数据写入
大数据·数据仓库·mysql·etl·kettle实战·kettlel批量插入·kettle mysql
深圳厨神3 小时前
mysql对表,数据,索引的操作sql
数据库·sql·mysql
谁家有个大人3 小时前
数据分析问题思考路径
数据库·数据分析
hweiyu003 小时前
从JVM到分布式锁:高并发架构设计的六把密钥
jvm·redis·分布式·mysql·etcd
小陈又菜3 小时前
MySQL-触发器
数据库·mysql·database·触发器