单体部署Mysql
1、下载mysql安装包
MySQL :: Download MySQL Community Server (Archived Versions)

2、检查mysql文件
# 检查之前是否存在mysql
rpm -qa | grep mysql
# 如果存在就删除
rpm -e xxx
# 检查是否存在mariadb
rpm -qa|grep mariadb
# 如果存在就删除
rpm -e mariadb-libs --nodeps
3、解压缩
# 进入到指定目录,并且将文件解压到该目录下
cd /usr/local
# 创建文件,将bundle文件上传至此
mkdir mysql
# 解压文件
tar -xvf mysql-8.4.0-1.el7.x86_64.rpm-bundle.tar
4、创建用户组并赋予权限
# 先检查是否有mysql用户组和mysql用户,没有就添加有就忽略
groups mysql
# 添加用户组和用户
groupadd mysql && useradd -r -g mysql mysql5、按照顺序进行rpm安装
# 执行顺序,不可以颠倒
rpm -ivh mysql-community-common-8.4.0-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.4.0-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.4.0-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.4.0-1.el7.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.4.0-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.4.0-1.el7.x86_64.rpm
6、初始化
# 修改文件拥有者为mysql组的mysql
chown mysql:mysql -R /var/lib/mysql
#切换用户
su - mysql
# 初始化
mysqld --initialize --console备注:切换用户,否则会导致mysql启动不起来
7、修改密码
# 启动mysql
systemctl start mysqld
# 生成的临时密码在mysqld.log文件下,过滤出查看,localhost后的为密码
# 2024-08-13T03:12:26.802769Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ?;QdF#jwc22h
cat /var/log/mysqld.log | grep localhost
# 回车后输入临时密码登录
mysql -uroot -p
# 修改密码
alter user 'root'@'localhost' identified by 'yourpassword';
# 退出
exit
# 使用新密码登录成功
mysql -uroot -pyourpassword
8、创建远程新用户
# 创建新的用户和密码,%表示可以远程链接
CREATE USER 'remote'@'%' IDENTIFIED BY 'yourpassword';
# 授予权限
GRANT ALL PRIVILEGES ON *.* TO 'remote'@'%' WITH GRANT OPTION;
# 刷新权限信息
FLUSH PRIVILEGES;
#查看已有的用户
SELECT user,host FROM mysql.user;
9、开放系统端口号,用于远程连接
#方案一:直接关闭整个防火墙
# 关闭防火墙
systemctl stop firewalld.service
# 查看防火墙的状态
firewall-cmd --state
# 禁止firewall开机启动
systemctl disable firewalld.service
#方案二:关闭指定端口号
# 3306 端口对外开放
firewall-cmd --permanent --add-port=3306/tcp
# 重启防火墙
firewall-cmd --reload
# 查询端口开放情况
firewall-cmd --query-port=3306/tcp
#如果报错: FirewallD is not running,开启防火墙即可
systemctl start firewalld
#SQLyog错误号码MySQL plugin caching_sha2_password could not be loaded
升级sqlyog,或者使用Navicat即可。
#下方命令用于关闭端口
firewall-cmd --remove-port=6379/tcp --permanent
Mysql主从复制
原理
主库会生成一个 log dump 线程,负责将增删改操作写入 binlog ;
从库生成两个线程,一个 I/O 线程,一个 SQL 线程;
I/O 线程去请求主库的 binlog,并将得到的 binlog 日志写到 relay log(中继日志) 文件中;
SQL 线程会读取 relay log 文件中的日志,并解析成具体操作由从库执行,来实现主从的操作一致,而最终数据一致;
主从复制构建
部署流程
1、在机器上先完成MySQL单机部署,下述操作以一主一从为例
2、 主库配置编辑:vim /etc/my.cnf
#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 232-1,默认为1
server-id=1
#是否只读,1 代表只读, 0 代表读写
read-only=0
# 启用二进制日志,路径中不要有中文和空格
log-bin=master-bin
# 可选,出错日志。出错之后可查看
# log-error=/opt/log
# 设置不要复制的数据库
# binlog-ignore-db=mysql
# 设置需要复制的数据库
# binlog-do-db=mydb2
# 设置logbin格式,默认就是statement,row/mixed(5.8以上支持)
# statement: 此格式,日志记录的是主机数据库的写指令 默认 性能 高,但是now()之类的获取系统参数的操# 作会出现主从数据不同步的问题
# row: 此格式,日志记录的是主机数据库的写后的数据 批量操作时性能较差 解决now()或者 user()或者 #@@hostname 等操作获取系统参数时 由于延迟导致 主从获取的参数值不同步出现的问题
# mixed: 会按照statement保存写操作,但是now()等获取系统参数的操作会自动转为参数值保存 5.8 以后支持
# binlog_format=STATEMENT
3、主库创建用户
# 启动MySQL
systemctl restart mysqld
# 创建新的用户和密码,%表示可以远程链接
CREATE USER 'remote'@'%' IDENTIFIED BY 'yourpassword';
#为 'master'@'%' 用户分配主从复制权限
GRANT REPLICATION SLAVE ON *.* TO 'remote'@'%';
FLUSH PRIVILEGES;
4、查看主库二进制文件
# mysql 8.4版本前使用这条命令查看
show master status;
# MySQL 8.4版本后使用这条命令查看
SHOW BINARY LOG STATUS;file : 从哪个日志文件开始推送日志文件
position : 从哪个位置开始推送日志
binlog_ignore_db : 指定不需要同步的数据库

5、修改从库配置:vim /etc/my.cnf
#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 2^32-1,和主库不一样即可
server-id=2
#是否只读,1 代表只读, 0 代表读写
read-only=16、建立主从关系
SOURCE_HOST:主库的ip地址。
SOURCE_USER:主库创建的用户名。
SOURCE_PASSWORD:主库创建的用户名密码。
SOURCE_LOG_FILE:主库binlog文件的位置。
SOURCE_LOG_POS:主库binlog文件中的偏移量。
# 重启MySQL
systemctl restart mysqld
# MSQL 8.23前
CHANGE MASTER TO MASTER_HOST='192.168.6.133', MASTER_USER='remote', MASTER_PASSWORD='yourpassword', MASTER_LOG_FILE='binlog.000003', MASTER_LOG_POS=158;
# MSQL 8.23后
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.6.133', SOURCE_USER='remote', SOURCE_PASSWORD='yourpassword', SOURCE_LOG_FILE='binlog.000003', SOURCE_LOG_POS=158;
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.6.136', SOURCE_USER='remote', SOURCE_PASSWORD='yourpassword', SOURCE_LOG_FILE='binlog.000004', SOURCE_LOG_POS=158,GET_SOURCE_PUBLIC_KEY=1;
7、开启同步
# 开启同步
start replica ; #8.0.22之后
start slave ; #8.0.22之前
# 查看状态,\G表示行转列,便于查看
show replica status\G ; #8.0.22之后
show slave status\G ; #8.0.22之前
部署问题
相同UUID
使用虚拟机直接拷贝,就会出现相同的UUID,vim /var/lib/mysql/auto.cnf,将MySQL的UUID修改,即可避免主从机器有相同的UUID

Replica_IO_Running: Connecting
Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
# mysql 8.4.0前
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.6.136', SOURCE_USER='remote', SOURCE_PASSWORD='yourpassword', SOURCE_LOG_FILE='binlog.000004', SOURCE_LOG_POS=158,get_master_public_key=1;
# mysql 8.4.0后
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.6.136', SOURCE_USER='remote', SOURCE_PASSWORD='yourpassword', SOURCE_LOG_FILE='binlog.000004', SOURCE_LOG_POS=158,GET_SOURCE_PUBLIC_KEY=1;
数据分片
使用中间件或者在代码端完成,参考Shardingsphere