• mysql升级


    一、安装mysql5.7

    1、下载软件包并解压

    #创建用户
    groupadd mysql &> /dev/null
    useradd mysql -g mysql -M -s /sbin/nologin &> /dev/null
    
    #下载安装包并解压
    wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.36-el7-x86_64.tar.gz
    tar xf mysql-5.7.36-el7-x86_64.tar.gz 
    
    #创建数据目录并修改属主
    mv mysql-5.7.36-el7-x86_64 /data/mysql
    mkdir -p /data/mysql/data
    chown -R mysql:mysql /data/mysql/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2、修改配置文件

    cat > /etc/my.cnf << EOF
    [mysqld]
    basedir=/data/mysql
    datadir=/data/mysql/data
    port = 3306
    socket=/tmp/mysql.sock
    symbolic-links=0
    log-error=/var/log/mysqld.log
    pid-file=/tmp/mysqld/mysqld.pid
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
    [client]
    default-character-set=utf8
    
    [mysql]
    default-character-set=utf8
    no-auto-rehash
    
    [mysqld]
    init_connect='SET collation_connection = utf8_unicode_ci'
    init_connect='SET NAMES utf8'
    character-set-server=utf8
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake
    server-id = 11
    log-bin=master-bin
    #binlog_format = MIXED
    log-slave-updates=true
    sync_binlog = 0
    skip-external-locking
    performance_schema_max_table_instances=400
    table_open_cache = 2048
    key_buffer_size = 512M
    sort_buffer_size = 8M
    net_buffer_length = 4M
    read_buffer_size = 4M
    read_rnd_buffer_size = 8M
    thread_cache_size = 300
    query_cache_size = 64M
    tmp_table_size = 246M
    query_cache_type = 1
    explicit_defaults_for_timestamp = true
    #skip-networking
    #skip-name-resolve
    max_connections = 2000
    max_connect_errors = 100000
    open_files_limit = 65535
    sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    #log-bin=mysql-bin
    binlog_format=row
    expire_logs_days = 10
    slow_query_log=1
    slow-query-log-file=/data/mysql/data/mysql-slow.log
    long_query_time=0.5
    #log_queries_not_using_indexes=on
    early-plugin-load = ""
    default_storage_engine = InnoDB
    innodb_data_home_dir = /data/mysql/data
    innodb_data_file_path = ibdata1:10M:autoextend
    innodb_log_group_home_dir = /data/mysql/
    innodb_buffer_pool_size = 3G
    innodb_log_file_size = 64M
    innodb_log_buffer_size = 16MB
    innodb_flush_log_at_trx_commit = 0
    innodb_lock_wait_timeout = 120
    innodb_max_dirty_pages_pct = 90
    innodb_read_io_threads = 4
    innodb_write_io_threads = 4
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68

    3、创建socket、log、pid文件

    #创建socket文件
    touch /tmp/mysql.sock
    chown mysql:mysql /tmp/mysql.sock
    chmod 755 /tmp/mysql.sock
    
    #创建log文件
    touch /var/log/mysqld.log
    chown -R mysql:mysql /var/log/mysqld.log
    chmod 755 /var/log/mysqld.log
    
    #创建pid文件
    mkdir /tmp/mysqld
    touch /tmp/mysqld/mysqld.pid
    chown -R mysql:mysql /tmp/mysqld
    chmod 755 /tmp/mysqld/mysqld.pid
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    4、启动服务

    #指定目录安装mysql
    cd /data/mysql/bin/
    ./mysqld --initialize --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data
    
    #后台安全启动
    ./mysqld_safe --user=mysql & 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5、修改默认密码

    #获取启动密码
    cat /var/log/mysqld.log | grep "temporary password" | awk '{print $NF}'
    
    #登录mysql、修改密码
    ./mysql -uroot -p
    
    alter user 'root'@'localhost' identified by '123456';
    grant all privileges on *.* to 'root'@'%' identified by '123456';
    FLUSH PRIVILEGES;
    exit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    6、优化启动

    #配置环境变量
    cat >> /etc/profile << EOF
    export MYSQL_HOME=/data/mysql
    export PATH="$PATH:$MYSQL_HOME/bin"
    EOF
    source /etc/profile
    
    #加入系统服务
    cp -a /data/mysql/support-files/mysql.server /etc/init.d/mysqld
    chkconfig --add /etc/init.d/mysqld
    chkconfig mysqld on
    
    #重启mysql
    pkill -9 mysqld
    systemctl start mysqld
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    二、mysql5.7小版本更新

    1、下载软件包并解压

    #下载安装包并解压
    wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.38-el7-x86_64.tar.gz
    tar xf mysql-5.7.38-el7-x86_64.tar.gz 
    chown -R mysql:mysql mysql-5.7.38-el7-x86_64
    
    • 1
    • 2
    • 3
    • 4

    2、插入数据供升级后验证

    3、升级mysql

    #备份全库
    mysqldump -uroot -p123456 --databases > /data/allbak.sql
    cp -a /data/mysql /data/mysqlbak
    
    #登录mysql执行慢速关闭
    mysql -u root -p
    select @@innodb_fast_shutdown;
    SET GLOBAL innodb_fast_shutdown=0;
    
    #关闭mysql
    systemctl stop mysqld
    
    #使用新的目录覆盖老的目录
    \cp -frp mysql-5.7.38-el7-x86_64/* /data/mysql
    
    #启动服务,升级
    systemctl start mysqld
    mysql_upgrade -uroot -p
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    4、测试

    #登录观察版本
    mysql -u root -p
    show variables like '%version%';
    
    #查看数据完整性
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5、回滚

    #关闭数据库
    systemctl stop mysqld
    
    #将当前数据库备份或删除
    mv /data/mysql /data/mysqlbak2
    
    #将之前的数据库
    mv /data/mysqlbak /data/mysql
    systemctl start mysqld
    
    #测试
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    三、mysql5.7升到到mysql8

    1、检查升级的前置条件

    #不得存在以下问题:
    - 不得有使用过时数据类型或函数的表。
      如果表包含 5.6.4 之前格式的 旧时间列(不支持小数秒精度的列)TIME, 则不支持就地升级到 MySQL 8.0 。如果您的表仍然使用旧的时间列格式,请在尝试就地升级到 MySQL 8.0 之前使用它们进行升级。有关更多信息,请参阅 MySQL 5.7 参考手册中的 服务器更改。 DATETIMETIMESTAMPREPAIR TABLE
    - 不能有孤立.frm文件。
    - 触发器不得缺少或为空的定义器或无效的创建上下文(由 character_set_client、 collation_connection、或 表Database Collation显示的属性 指示)。必须转储并恢复任何此类触发器以解决问题。 SHOW TRIGGERSINFORMATION_SCHEMA TRIGGERS
    要检查这些问题,请执行以下命令:
    
    mysqlcheck -u root -p --all-databases --check-upgrade
    
    #不能有使用不支持本机分区的存储引擎的分区表。要识别此类表,请执行以下查询:
    mysql -uroot -p
    
    SELECT TABLE_SCHEMA, TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    WHERE LOWER(TABLE_SCHEMA) = 'mysql'
    and LOWER(TABLE_NAME) IN
    (
    'catalogs',
    'character_sets',
    'check_constraints',
    'collations',
    'column_statistics',
    'column_type_elements',
    'columns',
    'dd_properties',
    'events',
    'foreign_key_column_usage',
    'foreign_keys',
    'index_column_usage',
    'index_partitions',
    'index_stats',
    'indexes',
    'parameter_type_elements',
    'parameters',
    'resource_groups',
    'routines',
    'schemata',
    'st_spatial_reference_systems',
    'table_partition_values',
    'table_partitions',
    'table_stats',
    'tables',
    'tablespace_files',
    'tablespaces',
    'triggers',
    'view_routine_usage',
    'view_table_usage'
    );
    
    #查询报告的任何表都必须更改为使用 InnoDB或不分区。要将表存储引擎更改为InnoDB,请执行以下语句:
    ALTER TABLE table_name ENGINE = INNODB;
    
    #要使分区表不分区,请执行以下语句:
    ALTER TABLE table_name REMOVE PARTITIONING;
    
    #MySQL 5.7 mysql系统数据库中不能有与 MySQL 8.0 数据字典使用的表同名的表。要识别具有这些名称的表,请执行以下查询:
    SELECT TABLE_SCHEMA, TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME IN
      (SELECT LEFT(SUBSTR(ID,INSTR(ID,'/')+1),
                   INSTR(SUBSTR(ID,INSTR(ID,'/')+1),'_ibfk_')-1)
       FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN
       WHERE LENGTH(SUBSTR(ID,INSTR(ID,'/')+1))>64);
       
    #不能有外键约束名称超过 64 个字符的表。使用此查询来识别约束名称过长的表:   
    SELECT DISTINCT NAME, SPACE, SPACE_TYPE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES
      WHERE NAME LIKE '%#P#%' AND SPACE_TYPE NOT LIKE 'Single';   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67

    2、下载软件包并解压

    wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.25-el7-x86_64.tar.gz
    tar xf mysql-8.0.25-el7-x86_64.tar.gz 
    chown -R mysql:mysql mysql-8.0.25-el7-x86_64
    mv mysql-8.0.25-el7-x86_64 /data/mysql8
    
    • 1
    • 2
    • 3
    • 4

    3、升级mysql

    #备份全库
    mysqldump -uroot -p123456 --databases > /data/allbak.sql
    cp -a /data/mysql /data/mysqlbak
    
    #登录mysql执行慢速关闭
    mysql -u root -p
    select @@innodb_fast_shutdown;
    SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown
    
    #关闭mysql
    systemctl stop mysqld
    
    #修改my.cnf
    vi /etc/my.cnf
    
    basedir=/data/mysql8
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
    #query_cache_size = 64M
    #query_cache_type = 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    4、启动mysql8

    #使用现有数据目录启动 MySQL 8.0 服务器
    cd /data/mysql8/bin
    ./mysqld_safe --user=mysql &
    
    • 1
    • 2
    • 3

    5、测试

    #登录查看版本
    ./mysql -uroot -p
    select version();
    
    #检查数据完整性
    
    • 1
    • 2
    • 3
    • 4
    • 5

    四、mysql8.0小版本升级

    1、下载软件包并解压

    wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.28-el7-x86_64.tar.gz
    tar xf mysql-8.0.28-el7-x86_64.tar.gz
    chown -R mysql:mysql mysql-8.0.28-el7-x86_64
    mv mysql-8.0.28-el7-x86_64 /data/mysql8.1
    
    • 1
    • 2
    • 3
    • 4

    2、升级mysql

    #备份全库
    mysqldump -uroot -p123456 --databases > /data/allbak.sql
    cp -a /data/mysql8 /data/mysql8bak
    
    #登录mysql执行慢速关闭
    mysql -u root -p
    select @@innodb_fast_shutdown;
    SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown
    shutdown
    
    #修改my.cnf
    vi /etc/my.cnf
    basedir=/data/mysql8.1
    datadir=/data/mysql8.1/data
    innodb_data_home_dir = /data/mysql8.1/data
    innodb_log_group_home_dir = /data/mysql8.1/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    3、启动mysql

    #使用现有数据目录启动 MySQL 8.0 服务器
    cd /data/mysql8.1/bin
    ./mysqld_safe --user=mysql &
    
    • 1
    • 2
    • 3

    4、测试

    #登录查看版本
    ./mysql -uroot -p
    select version();
    
    #检查数据完整性
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    etcd集群部署实战
    【C++】类和对象(上)
    从零开始学GeoServer源码(一)(搭建开发环境Win10+IDEA23.3.5+jdk11+geoserver2.24.x)
    AOP实现系统告警
    qt工程文件中根据编译环境进行不同操作
    [附源码]Python计算机毕业设计电影院订票系统
    Python学习之路-爬虫提高:selenium
    导入Maven项目遇到的一些问题及解决
    基于机器学习的搜索推荐系统
    Unity Hair 毛发系统 初体验
  • 原文地址:https://blog.csdn.net/weixin_51720711/article/details/126848618