mysql主从配置升级,从mysql5.7升级到mysql8.4

mysql主从配置升级,从mysql5.7升级到mysql8.4

一. 升级前准备

  1. 备份mysql主库的数据文件,核心配置文件my.cnf

    复制代码
    # 选定一个目录,在该目录下执行以下命令,备份文件会生成在当前目录下,以便后续恢复时方便查找
    
    # 备份所有数据库
    mysqldump -u root -p --all-databases > mysql_5.7_backup.sql
    
    # 备份指定的数据库(如果不想备份全部数据库的话,这里可以指定库)
    命令:mysqldump -u [用户名] -p [数据库名称] > backup_file.sql
    mysqldump -u root -p zqx-nj > zqx-nj.sql 
    
    # 备份配置文件,一定要先备份
    cp /etc/my.cnf /etc/my.cnf.backup
  2. 备份从库的数据文件、核心配置文件

    操作步骤和主库同步一直,在从库操作一遍即可。

    恢复数据的时候采用的都升级完成后先正确搭建主从关系,然后在主库恢复数据,数据会自动同步到从库。

    此处保险起见,先备份下数据。

    但是从库的核心配置文件my.cnf一定要备份

    复制代码
    # 备份配置文件,一定要先备份
    cp /etc/my.cnf /etc/my.cnf.backup
  3. 查看当前数据库版本,什么升级后可通过此处对比是否升级成功

    复制代码
    [root@localhost soft]# mysql --version
  4. 先关闭从库服务器

    复制代码
    # 在从库上执行
    
    # 停止从库(slave)的复制线程,使从库不再接收和应用来自主库(master)的 binlog 数据
    [root@localhost mysqlCopyData]# mysql -u root -p -e "STOP SLAVE"  
    
    # 停止服务器
    systemctl stop mysql
  5. 关闭主库服务器

    复制代码
    # 在主库上执行
    systemctl stop mysql

二. 获取要升级的mysql安装包

  1. mysql官网下载路径:https://dev.mysql.com/downloads/,具体下载步骤在另一篇博文

  2. 通过linux命令进行安装:

    复制代码
    # 进行想要保存安装包的目录下,执行下载命令:
    [root@localhost soft]# wget https://dev.mysql.com/get/mysql-8.4.7-1.el7.x86_64.rpm-bundle.tar
    
    # 解压:
    [root@localhost mysql]# tar -xvf mysql-8.4.7-1.el7.x86_64.rpm-bundle.tar

三. 安装,主库从库以下安装步骤一致

  1. 由于安装时报错,所以我这边先把旧版的全都卸载了

    未卸载时安装报错:

    复制代码
    # 执行以下命令卸载后就可以正常安装了
    [root@localhost mysqlTar8]# yum remove mysql-community-server mysql-community-client mysql-community-common mysql-community-libs mysql-community-devel
    
    [root@localhost mysqlTar8]# yum remove mariadb-libs
  2. 导入 GPG 密钥消除警

    复制代码
    rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
  3. 安装顺序:

    复制代码
    # 按以下安装顺序,否则有可能报错
    [root@localhost mysqlTar8]# rpm -ivh mysql-community-common-8.4.7-1.el7.x86_64.rpm
    
    [root@localhost mysqlTar8]# rpm -ivh mysql-community-client-plugins-8.4.7-1.el7.x86_64.rpm
    
    
    [root@localhost mysqlTar8]# rpm -ivh mysql-community-icu-data-files-8.4.7-1.el7.x86_64.rpm
    
    [root@localhost mysqlTar8]# rpm -ivh mysql-community-libs-8.4.7-1.el7.x86_64.rpm
    
    [root@localhost mysqlTar8]# rpm -ivh mysql-community-client-8.4.7-1.el7.x86_64.rpm
    
    [root@localhost mysqlTar8]# rpm -ivh mysql-community-server-8.4.7-1.el7.x86_64.rpm

四. 主从库核心文件my.cnf配置

  1. 查看目前默认配置文件,备份一下,然后用将之前复制的主库my.cnf文件替换默认的配置文件

    复制代码
    # 备份初始默认的配置文件
    [root@localhost etc]# cp /etc/my.cnf /etc/my.cnf.backup
    复制代码
    # 用之前备份的主库my.cnf.backup文件替换当前my.cnf文件
    [root@localhost etc]# cp /home/mysql8.4.7/mysqlCopyData/my.cnf.backup  /etc/my.cnf
  2. 我是指定了数据存储目录所以需要修改默认配置

    如果不想指定目录,默认的存储路径就是/var/lib/mysql

    复制代码
    # 修改basedir、datadir目录为新目录,比如我有个对应版本的mysql8.4.7的文件夹,就将位置设置为这个
    # 没有指定目录的,需要先创建
    mkdir -p /home/mysql8.4.7
    mkdir -p /home/mysql8.4.7/share
    
    # 授权,确保整个 MySQL 目录都有正确权限
    chown -R mysql:mysql /home/mysql8.4.7
    chmod -R 755 /home/mysql8.4.7
  3. 主库my.cnf文件配置

    复制代码
    [mysqld]
    basedir=/home/mysql8.4.7
    datadir=/home/mysql8.4.7/data
    ...
    # log_bin
    log_bin=mysql-bin # 开启binlog功能,设置名称为mysql-bin
    server-id=1 # 不可重复
    sync-binlog=1 # 每次执行一些写入操作就与磁盘同步
    binlog-ignore-db=performance_schema # 设置不同步哪些库
    binlog-ignore-db=information_schema
    binlog-ignore-db=sys
    #binlog-do-db=lagou #设置同步哪些库
    #
  4. 从库my.cnf文件配置

    复制代码
    [mysqld]
    basedir=/home/mysql8.4.7
    datadir=/home/mysql8.4.7/data
    ...
    # log_bin
    server-id=2 # 不可重复
    relay_log=mysql-relay-bin # 设置relay_log名称,不设置会有默认值
    read_only=1 # 设置为只读
    #
    # Remove leading # to set options mainly useful for reporting servers.

五. 数据库初始化

  1. 初始化数据目录

    复制代码
    # 重新初始化, 指定目录:/home/mysql8.4.7/data
    mysqld --initialize --user=mysql --datadir=/home/mysql8.4.7/data
    
    或者
    
    # 重新初始化, 使用默认的
    mysqld --initialize --user=mysql

    初始化会生成默认登录密码,需要记住,用户后面登录

  2. 修改SELinux状态

    启动报错:

    复制代码
     # 如果启用了SELinux,尝试临时禁用验证是否为原因
    [root@localhost mysql8.4.7]# getenforce
    [root@localhost mysql8.4.7]# setenforce 0
  3. 启动服务

    复制代码
    # 启动命令:
    systemctl start mysqld
    
    # 查看状态
    systemctl status mysqld

    查看版本:

  4. 登录后台,自定义密码

    复制代码
    # 登录就进入mysql,输入上一步查询到的密码:
    [root@localhost data]# mysql -u root -p

    自定义密码:

    复制代码
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
    
    mysql> SET PASSWORD FOR 'root'@'localhost' = '新密码';
    
    # 以上2种都可以
  5. 解决外部访问不了mysql:

    判断账号权限是否正确,进入mysql中查询账号:

    复制代码
    mysql> select user,host,Insert_priv from mysql.user;
    
    # 当host为localhost或指定ip地址,说明当前账号只能在本机或对应ip地址主机能登录成功,当
    host为"%"时表示当前局域网内任意主机均支持登录。
    
    # 设置允许远程连接:
    mysql> update mysql.user set host = '%' where user = 'root';
    
    刷新系统权限相关表:
    mysql> flush privileges;
  6. 进行从库的安装,重复以上步骤

六. 进行主从配置

  1. 主库master配置,用新账户进入mysql,创建用于slave复制的用户

    复制代码
    -- 创建复制用户
    CREATE USER 'repl'@'%' IDENTIFIED BY 'replication_password';
    
    -- 授予复制权限
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
    
    -- 刷新权限
    FLUSH PRIVILEGES;
  2. 查看主服务器状态

    复制代码
    # 锁定数据库(只读),防止数据变更
    FLUSH TABLES WITH READ LOCK;
    
    # 查看主服务器状态,记录File和Position值,用于从库复制参数使用
    SHOW BINARY LOG STATUS;
  3. 从库slave配置,进行同步初始化命令设置

    进行同步前查看从库状态:

    复制代码
    SHOW REPLICA STATUS\G
    复制代码
    # 配置主服务器信息
    mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='xx.xx.xx.xx',SOURCE_USER='repl',SOURCE_PASSWORD='replication',SOURCE_PORT=3306,SOURCE_LOG_FILE='mysql-bin.000002',SOURCE_LOG_POS=1337;
    
    # 参数说明:
    SOURCE_HOST: 主服务器IP地址
    SOURCE_USER: 复制用户名称
    SOURCE_PASSWORD: 复制用户密码
    SOURCE_PORT: 主服务器端口号
    SOURCE_LOG_FILE: 二进制日志文件名,在主库中查看到的File
    SOURCE_LOG_POS: 二进制日志位,在主库中查看到的Position
    
    
    # 启动复制
    mysql> START REPLICA;
    
    # 其它备用命令
    STOP REPLICA; -- 停止备份
    SHOW REPLICA STATUS; -- 查看备份状态
  4. 查看slave状态

    复制代码
    SHOW REPLICA STATUS\G

七. 在主库进行数据恢复

  1. 自己可以先在主库创建一个数据验证是否同步到主库了,如果同步了,可以开始进行数据恢复

  2. 执行数据恢复命令

    复制代码
    ## 命令: mysql -u [username] -p[password] [database_name] < backup_file.sql
    
    [root@localhost mysqlCopyData]# mysql -u root -p zqx-nj < zqx-nj20251107.sql
  3. 在从库中查看,此时数据已经同步过去了。

Complete!

参考

  1. mysql调用报错max_connect_errors

    复制代码
    # 清除主机阻塞列表: 解除因连接错误过多而被MySQL服务器阻塞的客户端主机
    # 重置连接错误计数: 清空 max_connect_errors 的累计计数
    mysqladmin flush-hosts -u root -p  -u [username] -p[password] [database_name] < backup_file.sql
相关推荐
moringlightyn1 小时前
Linux---进程状态
linux·运维·服务器·笔记·操作系统·c·进程状态
go_bai2 小时前
Linux-线程2
linux·c++·经验分享·笔记·学习方法
shizhan_cloud2 小时前
DNS 服务器
linux·运维
q***13343 小时前
Linux系统离线部署MySQL详细教程(带每步骤图文教程)
linux·mysql·adb
王宪笙3 小时前
Qt之数据库使用示例
数据库·qt
小雪_Snow3 小时前
Ubuntu 安装教程
linux·ubuntu
消失的旧时光-19433 小时前
Android ADB指令大全详解
android·adb
q***42823 小时前
Redis 设置密码(配置文件、docker容器、命令行3种场景)
数据库·redis·docker
IT逆夜4 小时前
linux系统安全及应用
linux·运维