目录
随着数据量的不断增长和业务对数据库高可用性、高扩展性及高性能的需求日益强烈,MySQL 集群技术应运而生。它解决了传统单节点 MySQL 数据库面临的单点故障问题,通过多节点部署实现高可用性,当某个节点出现故障时,其他节点可以继续提供服务;同时解决了数据存储容量和处理能力的瓶颈问题,实现了可扩展性,能够随着业务的发展动态增加节点;还提升了数据库的性能,通过负载均衡等技术将请求分发到不同节点进行处理,提高了响应速度和吞吐量。
一、MySQL安装部署
1、MySQL源码安装
环境准备:
基于RHEL7环境的mysql源码安装
1、安装源码安装需要的软件
[root@mysql-node1 ~]# yum install cmake gcc-c++ openssl-devel -y
[root@mysql-node1 ~]# yum install ncurses-devel.x86_64 -y
[root@mysql-node1 ~]# yum install libtirpc-devel-0.2.4-0.16.el7.x86_64.rpm -y
[root@mysql-node1 ~]# tar zxf mysql-boost-5.7.44.tar.gz
[root@mysql-node1 ~]# cd mysql-5.7.44/
2、源码编译及安装
[root@mysql-node1 ~]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci -DWITH_BOOST=/root/mysql-5.7.44/boost/boost_1_59_0/
[root@mysql-node1 ~]# make -j4 && make install
2、MySQL部署
[root@mysql-node2 ~]# cd /usr/local/mysql/
[root@mysql-node2 ~]# useradd -s /sbin/nologin -M mysql
[root@mysql-node2 mysql]# mkdir /data/mysql -p
[root@mysql-node2 ~]# chown mysql.mysql -R /data/mysql
[root@mysql-node2 support-files]# cp mysql.server /etc/init.d/mysqld
[root@mysql-node2 ~]# vim /etc/my.cnf
[root@mysql-node2 ~]# cat /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
[root@mysql-node2 ~]# vim ~/.bash_profile
[root@mysql-node2 ~]# source ~/.bash_profile
数据库初始化建立mysql基本数据
[root@mysql-node2 ~]# mysqld --user mysql --initialize
[root@mysql-node2 ~]# /etc/init.d/mysqld start
[root@mysql-node2 ~]# chkconfig mysqld on
安全初始化
[root@mysql-node2 ~]# mysql_secure_installation
二、MySQL组从复制
1、组从复制集群配置
master配置
[root@mysql-node1 ~]# vim /etc/my.cnf
[root@mysql-node1 ~]# cat /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=10
log-bin=mysql-bin
[root@mysql-node1 ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
进入数据库配置用户权限
salve配置
[root@mysql-node2 ~]# vim /etc/my.cnf
[root@mysql-node2 ~]# cat /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=2
[root@mysql-node2 ~]# /etc/init.d/mysqld restart
2、mysql主从集群slave添加及延迟回放
1、slave添加
添加第二个slave安装部署mysql
生产环境中备份时需要锁表,保证备份前后的数据一致 mysql> FLUSH TABLES WITH READ LOCK;
备份后再解锁 mysql> UNLOCK TABLES; mysqldump命令备份的数据文件,在还原时先DROP TABLE,需要合并数据时需要删除此语句
master节点备份数据
[root@mysql-node1 ~]# mysqldump -uroot -p mlh > mlh.sql
[root@mysql-node1 ~]# scp mlh.sql root@172.25.254.30:/mnt/
[root@mysql-node3 mnt]# mysql -uroot -p123 -e "CREATE DATABASE mlh;"
[root@mysql-node3 mnt]# mysql -uroot -p123 mlh < mlh.sql
CHANGE MASTER TO MASTER_HOST='172.25.254.10',MASTER_USER='repl',MASTER_PASSWORD='123',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=154;
测试:
master
mysql> INSERT INTO mlh.userlist values('user2','123');
Query OK, 1 row affected (0.00 sec)
slave2
2、延迟复制
延迟复制指的是从服务器在复制主服务器的二进制日志时,故意设置一定的时间延迟,而不是实时同步数据。例如,主服务器上的数据发生变化后,从服务器不会立即进行同步,而是等待一段时间(如几分钟、几小时等)后再开始复制这些变化。
mysql> STOP SLAVE SQL_THREAD;
Query OK, 0 rows affected (0.00 sec)
mysql> CHANGE MASTER TO MASTER_DELAY=60;
Query OK, 0 rows affected (0.00 sec)
mysql> START SLAVE SQL_THREAD;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW SLAVE STATUS\G;
3、慢查询日志
慢查询日志可以记录执行时间超过特定阈值的 SQL 语句,帮助你找出性能瓶颈,以便进行优化。在主从集群环境下,它对于分析整个系统的性能问题尤其重要。
-
性能优化:通过分析慢查询日志中的语句,可以针对性地进行索引优化、查询重写等操作,提高数据库的响应速度。
-
故障排查:如果主从同步出现延迟,慢查询日志可以帮助确定是否是由于某些耗时的查询导致从库无法及时跟上主库的写入速度。
mysql> SET GLOBAL slow_query_log=ON;
Query OK, 0 rows affected (0.00 sec)
#开启慢查询功能
测试:
mysql> SELECT SLEEP (10);
[root@mysql-node1 ~]# cat /data/mysql/mysql-node1-slow.log
#慢查询日志
4、MySQL并行复制
传统的 MySQL 主从复制是单线程的,即从库只有一个 SQL 线程来顺序地应用主库传过来的二进制日志(binlog)。而并行复制则允许多个线程同时处理不同的事务,从而加快从库的复制速度,减少主从之间的延迟。
[root@mysql-node2 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=2
gtid_mode=ON
enforce-gtid-consistency=ON
slave-parallel-type=LOGICAL_CLOCK #基于组提交,
slave-parallel-workers=10 #开启线程数量
master_info_repository=TABLE #master信息在表中记录,默认记录
在/data/mysql//master.info
relay_log_info_repository=TABLE #回放日志信息在表中记录,默认记录
在/data/mysql/relay-log.info
relay_log_recovery=ON #日志回放恢复功能开启
[root@mysql-node2 ~]# /etc/init.d/mysql start
5、组从复制原理
三个线程 实际上主从同步的原理就是基于 binlog 进行数据同步的。在主从复制过程中,会基于3 个线程来操作, 一个主库线程,两个从库线程。
-
二进制日志转储线程(Binlog dum