zoukankan      html  css  js  c++  java
  • MySQL 升级详细步骤 (包括 Percona)

    MySQL 升级步骤

    MySQL 5.1.72 升级到 MySQL 5.5.36

    鉴于我在升级的时候遇到的麻烦问题,我觉得有必要把一些细节说清楚,免得引起误解了。感觉官方文档上的升级步骤写的比较简单,很容易引起混淆,感觉同我当时参照官方文档学习定制安装 MySQL 一样蛋疼。可能真的是外国淫的思维跟我差距太大了。

    数据库情况:本人测试的都是 Linux Generic x86_64 版本的,也是定制安装到制定的数据库目录的。

    详细升级步骤

    1.MySQL 5.1.72 启动的实例 ins1

    假设你已经安装了 MySQL 5.1.72,并且成功的启动了一个实例 ins1。软件可以在官网 MySQL 5.1.72 下载。

    2.备份 ins1的数据和配置文件my1.cnf

    无论以前操作了多少次升级步骤,升级前备份数据那是必须的!我这里是测试数据,就直接通过mysqldump 工具备份的,如果是生产库,可以使用 percona 公司的在线备份工具进行备份。

    复制一份my1.cnf到其他位置进行备份,防止升级失败后能够快速的恢复 ins1。

    3.关闭 ins1

     mysqladmin -uroot -p -S $sockdir  shutdown 

    4.通过 MySQL 5.5.36 启动 实例ins1 原来的数据目录,命名为 ins2

    1)修改my1.cnf ,把一些与高版本不兼容的参数或者一些废弃的参数修改成高版本能够接受的参数。

    2)用高版本的 MySQL 5.5.36 来启动,切记不要用低版本的 MySQL 启动,那样 my1.cnf 的修改也米有意义了。

    因为高版本的系统库 mysql database 和低版本的 mysql database 会有一些表是不兼容的,所以为了让高版本的 MySQL 能够启动 低版本的系统数据,需要加上参数 --skip-grant-tables 来忽略mysql database 里授权表(grant tables)的验证。同时,忽略授权表启动 MySQL 实例 ins2 后, 为了保证 MySQL 实例的安全,可以加上参数 --skip-networking 来阻止通过网络来访问的客户端。

    mysqld_safe --defaults-file=$cnf_path --skip-grant-tables --skip-networking &
    

    5.执行 mysql_upgrade

    启动实例 ins2 成功以后,通过高版本的 MySQL 5.5.36 的 bin 目录 mysql_upgrade 命令来升级 ins2

    mysql_upgrade -uroot -p -S $socket_path
    

    这个步骤实际执行的内容(来源于手册):

    mysqlcheck --all-databases --check-upgrade --auto-repair
    mysql < fix_priv_tables
    mysqlcheck --all-databases --check-upgrade --fix-db-names --fix-table-names
    

    如果看到最后面显示的OK,表示成功了

    ...
    mysql.time_zone_transition_type                    OK
    mysql.user                                         OK
    percona51.ptablet                                  OK
    Running 'mysql_fix_privilege_tables'...
    OK
    

    6.重启 mysql 实例ins2

    用MySQL 5.5.36 的二进制包(不是 MySQL 5.1.72)

    mysqladmin -uroot -p -S $sockdir  shutdown
    #这次正常启动,不需要带上其他参数。
    mysqld_safe --defaults-file=$cnf_path &
    

    Percona Server 5.1.61 升级到 Percona Server 5.5.39

    Percona Server 是 Percona 公司根据 MySQL 存在的一些性能上的缺陷进行改进,从而形成了一个新的免费的 MySQL 版本。 他们的升级文档就是三个字来形容就是 “太简单”,为了把一些步骤说清楚,也为了我以后少走点弯路,我还是把我升级步骤详细的罗列出来,以供日后查阅吧。

    这次升级我从安装 Percona Server 实例开始讲述,因为 Percona 的配置文件和 MySQL 还是有部分区别的,新手用二进制文件安装的话可能需要一回来查找执行文件。

    1.安装 Percona Server 5.1.61 实例 P1

    1)下载 Percona Server 5.1.61

    2)解压缩文件,然后进入到安装目录下。

    我这里是 /home/devops/Percona-Server-5.1.61

    3)根据 配置文件来文件:Percona5.1.txt 安装系统库目录

    这个目录是针对我自己的安装目录,参数需要根据自己的 OS 进行调整。主要需要注意的是如下几个参数:

    #这两个参数在高版本的参数文件中需要调整
    ledir           = /home/devops/Percona-Server-5.1.61/libexec
    language                = /home/devops/Percona-Server-5.1.61/share/mysql/english
    #根据自己内存大小来调整
    innodb_buffer_pool_size = 256M 
    

    配置文件穿件完毕后,安装系统库。执行命令:

    ./bin/mysql_install_db --defaults-file=/home/devops/cnf/mysql4308.cnf --basedir=/home/devops/Percona-Server-5.1.61
    

    4)验证系统库是否安装成功

    要验证系统库是否安装成功,可以在参数文件中指定的data-dir目录下看看是否有 mysql,test文件夹,以及mysql文件夹下面是否有很多以 frm、MYI、MYD 接尾的系统文件。

    5)启动实例 P1

     
    $ cd /home/devops/Percona-Server-5.1.61/bin
    ./mysqld_safe --defaults-file=/home/devops/cnf/mysql4308.cnf &
    
    # ps -ef | grep 4308 验证是否成功,如果没有,请看看 MySQL 错误日志,是否哪里的参数出现了问题。
    

    2.备份5.1参数文件,修改参数文件来满足 Percona 5.5 的参数要求(重要!!)

    备份 mysql4308.cnf :$ cp mysql4308.cnf mysql4308_bak.cnf。修改 mysql4308.cnf 来符合 Percona Server 5.5.36 的参数需求,具体的差异可以查看 Percona文档,本人操作的时候主要修改了如下的几个参数:

    ledir           = /home/devops/percona/percona5.5.39/bin
    lc-messages-dir         =/home/devops/percona/percona5.5.39/share
    

    修改后的参数文件 文件:Percona5.5.txt

    3.关闭 实例 P1,用 Percona Server 5.5.39 以(skip-grant-tables)方式启动 实例 P2

    1)下载Percona Server 5.5.39  http://www.percona.com/redir/downloads/Percona-Server-5.5/Percona-Server-5.5.39-36.0/binary/tarball/Percona-Server-5.5.39-rel36.0-697.Linux.x86_64.tar.gz,解压缩。

    2)重启 MySQL

    这次是第一次用高版本的 MySQL软件启动低版本的数据,避免权限表的验证,需要加上 skip-grant-tables 参数。

    cd /home/devops/percona/percona5.5.39/bin
    ./mysqladmin -uroot -p -S /home/devops/mysql4308/mysqld.sock  shutdown
    ./mysqld_safe --defaults-file=/home/devops/cnf/mysq4308.cnf --skip-grant-tables --skip-networking &
    

    note: 最后一步执行mysqld_safe的时候,很可能因为参数文件的参数不能被识别而导致出现启动错误,请根据错误日志的提示来修正。

    4.执行 Percona Server 5.5.36 的 mysql_upgrade

    ./mysql_upgrade -uroot -p -S /home/devops/mysql4308/mysqld.sock
    

    执行后如果出现下面的情况,表示 OK 了。

    ......
    mysql.user                                         OK
    percona51.ptablet                                  OK
    Running 'mysql_fix_privilege_tables'...
    OK
    

    5.关闭实例 P2,然后重启 MySQL

    cd /home/devops/percona/percona5.5.39/bin
    mysqladmin -uroot -p -S /home/devops/mysql4308/mysqld.sock shutdown
    ./mysqld_safe --defaults-file=/home/devops/cnf/mysq4308.cnf &
    

    6.验证是否成功

    ./mysql -uroot -p -S /home/devops/mysql4308/mysqld.sock 
    
    mysql> status
    --------------
    ./mysql  Ver 14.14 Distrib 5.5.39-36.0, for Linux (x86_64) using readline 5.1
    
    ....
    Server version:         5.5.39-36.0-log Percona Server (GPL), Release 36.0, Revision 697
    ....
    

    可以看到版本是 5.5.39-36.0的了。

    Percona Server 5.1.61 升级到 MySQL 5.5.36

    可能是因为 Percona 和 MySQL 对于系统表空间的解读方式不一致,我在升级以后,发现无法用 MySQL 5.5.36 来启动 Percona Server 5.1.61 的实例。错误日志提示的是 共享表空间无法打开,暂时先不这么跨软件升级,以后闲的时候可以再看看两者的区别。

    目前只是知道 Percona 对 MySQL 做了一些性能上的优化与拓展。

    Percona5.1.txt

    [client]
    port            = 4308
    socket          = /home/devops/mysql4308/mysqld.sock
    
    [mysqld_safe]
    user            = devops
    nice            = 0
    #ledir           = /home/devops/percona/percona5.5.39/bin
    ledir           = /home/devops/Percona-Server-5.1.61/libexec
    #ledir          = /home/mysql/
    #mysqld         = @home_mysql_mysql_libexec_mysqld
    
    
    [mysqld]
    server-id               = 2949
    bind-address            = localhost
    port                    = 4308
    pid-file                = /home/devops/mysql4308/mysqld.pid
    socket                  = /home/devops/mysql4308/mysqld.sock
    basedir                 = /home/devops/percona/Percona-Server-5.1.61
    datadir                 = /home/devops/mysql4308
    innodb_data_home_dir    = /home/devops/mysql4308
    innodb_log_group_home_dir       = /home/devops/mysql4308
    tmpdir                  = /home/devops/mysql4308
    log-error               = /home/devops/mysql4308/mysqld.log
    slow_query_log          = 2
    slow_query_log_file     = /home/devops/mysql4308/mysql-slow.log 
    log_bin                 = /home/devops/mysql4308/mysql-bin.log
    binlog_format           = MIXED
    relay-log               = mysqld-relay-bin
    
    user                    = devops
    language                = /home/devops/Percona-Server-5.1.61/share/mysql/english
    #lc-messages-dir                =/home/devops/percona/percona5.5.39/share
    table_cache             = 512
    long_query_time         = 5
    max_connections         = 300
    query_cache_type        = 0
    character-set-server    = utf8
    #default-character-set   = utf8
    default-storage-engine  = innodb
    skip-external-locking
    expire_logs_days        = 7
    max_binlog_size         = 100M
    max_allowed_packet      = 16M
    
    # innodb plugin
    
    innodb_buffer_pool_size = 256M
    innodb_data_file_path   = ibdata1:64M:autoextend
    innodb_autoextend_increment     = 16
    innodb_log_files_in_group       = 2
    innodb_log_file_size    = 64M
    innodb_lock_wait_timeout        = 5
    innodb_flush_method     = O_DIRECT
    innodb_flush_log_at_trx_commit    = 0
    innodb_file_per_table      = 1
    innodb_file_format         = Barracuda
    innodb_file_format_check         = ON
    #innodb_adaptive_checkpoint = estimate
    #innodb_expand_import       = 1
    innodb_read_io_threads     = 8
    #innodb_stats_method        = nulls_unequal
    #innodb_strict_mode         = 1
    innodb_thread_concurrency  = 12
    innodb_write_io_threads    = 3
    innodb_read_io_threads     = 3
    innodb_io_capacity         = 200
    #innodb_adaptive_flushing   = false
    
    # percona
    innodb_page_size=8k
    #innodb_extra_rsegments=8
    #innodb_use_purge_thread=4
    #innodb_stats_update_need_lock=0
    #innodb_fast_checksum=1
    #log_slow_verbosity=full
    #userstat_running=1
    #enable_query_response_time_stats=1
    
    # percona For SSD
    #innodb_adaptive_checkpoint=3
    #innodb_flush_neighbor_pages=0
    
    
    [mysqldump]
    quick
    quote-names
    max_allowed_packet      = 16M
    default-character-set   = utf8
    
    [mysql]
    default-character-set = utf8
    View Code

    Percona5.5.txt

    View Code
  • 相关阅读:
    TimusOJ Bald Spot Revisited(质因数分解)
    hdu 6170 Two strings(dp)
    线性筛资料
    BZOJ3437 小P的牧场(斜率优化dp)
    First Blog
    【BZOJ】3930: [CQOI2015]选数
    【Ctsc2011】幸福路径
    【BZOJ】4012: [HNOI2015]开店
    【BZOJ】 3238: [Ahoi2013]差异
    【NOI2014】动物园
  • 原文地址:https://www.cnblogs.com/liushuiwuqing/p/3979243.html
Copyright © 2011-2022 走看看