mysql离线安装和主从配置

pclin
74
2024-11-20

单体部署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 mysql

5、按照顺序进行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主从复制

原理

  1. 主库会生成一个 log dump 线程,负责将增删改操作写入 binlog ;

  2. 从库生成两个线程,一个 I/O 线程,一个 SQL 线程;

  3. I/O 线程去请求主库的 binlog,并将得到的 binlog 日志写到 relay log(中继日志) 文件中;

  4. 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=1

6、建立主从关系

  • 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


源链接:https://juejin.cn/post/7408008683366154291

动物装饰