zoukankan      html  css  js  c++  java
  • mysql版本升级

    MYSQL 升级方式有两种,一种叫做In-place Upgrade,另一种叫logical upgrade(逻辑升级方式)。

    Logical upgrade:利用mysqldump直接导出sql文件,然后倒入到新库中,适用于跨度大的版本的升级方案,做法相对安全,并能整理表中碎片。但如果有数据量较大的库需要mysqldump导出,时间就会很长。

    In-place upgrade:他的工作方法简单快速,就是直接替换掉原来版本的MySQL的安装目录和my.cnf配置文件,利用mysql_upgrade 脚本来完成系统表的升级。

    注意:跨小版本升级可以使用in-place这种方法。

    1、in-place upgrade

    1.1.     环境介绍

    IP: 172.16.10.22

    数据目录:/mydata/mysql/mysql3306/data

    安装目录:/usr/local/mysql5.6

    配置文件:/etc/my3306.cnf

    当前版本:5.6.38

    1.2.     升级(5.6.38升级到5.7.20)

    a)    设置INNODB_FAST_SHUTDOWN参数设置为0

    set global innodb_fast_shutdown=0;

     

    innodb_fast_shutdown有0,1,2三个值。参数0代表mysql关闭,innodb需要完成所有full purge和merge insert buffer操作,这个过程需要一定的时间,有事可能会花上几个小时。参数值为1是该参数的默认值,表示关闭mysql时不完成full purge和merge insert buffer操作,但是缓冲池中的脏页还是会写到磁盘中。参数值为2时,表示既不完成full purge和merge insert buffer 操作,也不将缓冲池中的脏页刷新到磁盘,而是将日志写入到日志文件中。

    b)   关闭mysql服务

    mysqladmin -S /tmp/mysql3306.sock -uroot -pmysql shutdown

     

    c)    替换mysql的安装文件和参数以及路径

    cp /soft/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz /usr/local/

    tar -zxvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

    unlink mysql5.6

    ln -s mysql-5.7.20-linux-glibc2.12-x86_64 mysql5.7

    mv /etc/my3306.cnf /etc/my3306.cnf.bak

    vi /root/.bash_profile

    export PATH=$PATH:/usr/local/mysql5.7/bin

    source /root/.bash_profile

    cd /mydata/mysql/

    mv mysql3306 mysql3307

    由于我的数据文件路径是:/mydata/mysql/mysql3306/data

    现在需要修改成:

    /mydata/mysql/mysql3307/data

    设置新的my3307.cnf文件(具体情况具体修改):

    [client]

    port = 3307

    socket = /tmp/mysql5.7.sock

    [mysql]

    prompt="u@db R:m:s [d]> "

    no-auto-rehash

    [mysqld]

    user = mysql

    port = 3307

    basedir = /usr/local/mysql5.7

    datadir = /mydata/mysql/mysql3307/data

    log_bin_trust_function_creators=1

    socket = /tmp/mysql3307.sock

    lower_case_table_names=1

    character-set-server = utf8mb4

    skip_name_resolve = 1

    innodb_undo_log_truncate=1

    open_files_limit = 65535

    back_log = 1024

    max_connections = 500

    max_connect_errors = 1000000

    table_open_cache = 1024

    table_definition_cache = 1024

    table_open_cache_instances = 64

    thread_stack = 512K

    external-locking = FALSE

    max_allowed_packet = 32M

    sort_buffer_size = 4M

    join_buffer_size = 4M

    thread_cache_size = 768

    query_cache_size = 0

    query_cache_type = 0

    interactive_timeout = 600

    wait_timeout = 600

    tmp_table_size = 32M

    max_heap_table_size = 32M

    slow_query_log = 1

    slow_query_log_file = /mydata/mysql/mysql3307/logs/slow.log

    log-error = /mydata/mysql/mysql3307/logs/error.log

    long_query_time = 0.1

    server-id = 3307101

    log-bin = /mydata/mysql/mysql3307/logs/mysql-binlog

    sync_binlog = 1

    binlog_cache_size = 4M

    max_binlog_cache_size = 1G

    max_binlog_size = 1G

    expire_logs_days = 7

    master_info_repository = TABLE

    relay_log_info_repository = TABLE

    gtid_mode = on

    enforce_gtid_consistency = 1

    log_slave_updates

    binlog_format = row

    relay_log_recovery = 1

    relay-log-purge = 1

    key_buffer_size = 32M

    read_buffer_size = 8M

    read_rnd_buffer_size = 4M

    bulk_insert_buffer_size = 64M

    lock_wait_timeout = 3600

    explicit_defaults_for_timestamp = 1

    innodb_thread_concurrency = 0

    innodb_sync_spin_loops = 100

    innodb_spin_wait_delay = 30

    transaction_isolation = REPEATABLE-READ

    innodb_buffer_pool_size = 1024M

    innodb_buffer_pool_instances = 8

    innodb_buffer_pool_load_at_startup = 1

    innodb_buffer_pool_dump_at_shutdown = 1

    innodb_data_file_path = ibdata1:1G:autoextend

    innodb_flush_log_at_trx_commit = 1

    innodb_log_buffer_size = 32M

    innodb_log_file_size = 2G

    innodb_log_files_in_group = 2

    innodb_max_undo_log_size = 4G

    innodb_io_capacity = 2000

    innodb_io_capacity_max = 4000

    innodb_flush_neighbors = 0

    innodb_write_io_threads = 8

    innodb_read_io_threads = 8

    innodb_purge_threads = 4

    innodb_page_cleaners = 4

    innodb_open_files = 65535

    innodb_max_dirty_pages_pct = 50

    innodb_flush_method = O_DIRECT

    innodb_lru_scan_depth = 4000

    innodb_checksum_algorithm = crc32

    innodb_lock_wait_timeout = 10

    innodb_rollback_on_timeout = 1

    innodb_print_all_deadlocks = 1

    innodb_file_per_table = 1

    innodb_online_alter_log_max_size = 4G

    internal_tmp_disk_storage_engine = InnoDB

    innodb_stats_on_metadata = 0

    innodb_status_file = 1

    innodb_status_output = 0

    innodb_status_output_locks = 0

    performance_schema = 1

    performance_schema_instrument = '%=on'

    #innodb monitor

    innodb_monitor_enable="module_innodb"

    innodb_monitor_enable="module_server"

    innodb_monitor_enable="module_dml"

    innodb_monitor_enable="module_ddl"

    innodb_monitor_enable="module_trx"

    innodb_monitor_enable="module_os"

    innodb_monitor_enable="module_purge"

    innodb_monitor_enable="module_log"

    innodb_monitor_enable="module_lock"

    innodb_monitor_enable="module_buffer"

    innodb_monitor_enable="module_index"

    innodb_monitor_enable="module_ibuf_system"

    innodb_monitor_enable="module_buffer_page"

    innodb_monitor_enable="module_adaptive_hash"

    [mysqldump]

    quick

    max_allowed_packet = 32M

    d)   启动mysql服务

    启动过程需要加上 --skip-grant-tables和--skip-networking 参数,来保证没有任何的应用连接,让升级过程更加安全。

    /usr/local/mysql5.7/bin/mysqld_safe --defaults-file=/etc/my3307.cnf --skip-grant-tables --skip-networking &

     

    错误日志很多报错:

     

    证明系统没有升级系统表信息。

    e)   升级系统数据字典信息

    /usr/local/mysql5.7/bin/mysql_upgrade -S /tmp/mysql3307.sock

     

    没有报错表示系统表升级成功。

    f)   正常启动MYSQL不使用--skip-grant-tables和--skip-networking 参数

    /usr/local/mysql5.7/bin/mysqladmin -S /tmp/mysql3307.sock -uroot -pmysql shutdown

    /usr/local/mysql5.7/bin/mysqld_safe --defaults-file=/etc/my3307.cnf &

    /usr/local/mysql5.7/bin/mysql -S /tmp/mysql3307.sock -uroot -pmysql

     

    查看sys库也存在:

     

    2、logical upgrade

    第二种办法多用于跨度大的版本升级,我一般是用于一台服务器迁移到另一台服务器:

    例如,我从5.1.72升级到5.7.20

    首先利用MySQLDUMP 出数据库文件,由于版本差距太大,我把导出的SQL文件引擎全部换成INNODB。

    在5.1.72库上执行:

    mysql -S /tmp/mysql.sock  -uroot -p smsdbtest > /soft/smsdbtest.sql

    把导出的文件传到安装的5.7.20库上进行导入:

     

    导入:

    mysql -S /tmp/mysql3307.sock -uroot -p smsdbtest < /soft/smsdbtest.sql

     

    导入成功,并进行检查。

  • 相关阅读:
    88. Merge Sorted Array【leetcode】算法,java将两个有序数组合并到一个数组中
    70. Climbing Stairs【leetcode】递归,动态规划,java,算法
    136. Single Number【LeetCode】异或运算符,算法,java
    605. Can Place Flowers种花问题【leetcode】
    175. Combine Two Tables【LeetCode】-LEFT JON 和RIGHT JOIN,两张表关联查询-java -sql入门
    67. Add Binary【LeetCode】
    4.1 yaml配置注入
    2.1容器功能-组件添加
    1.2自动配置
    json乱码问题全配置
  • 原文地址:https://www.cnblogs.com/hmwh/p/9661731.html
Copyright © 2011-2022 走看看