zoukankan      html  css  js  c++  java
  • MySQL社区版升级到Percona Server

    出于磁盘空间的考虑,在调研以后把磁盘空间紧张的库的引擎改为tokudb,(在改为tokudb引擎之前是innodb引擎,已经压缩过,但空间还是紧张)关于tokudb的优势各位自行查阅相关资料。要启用tokudb引擎就需要使用percona server。tokudb引擎被percona server收购。线上mysql的版本是社区版5.5.24,于是升级过程就是 5.5.24 -> 5.6.25 -> 5.7.21 -> percona-5.7.22。在升级到percona 5.7.22以后启用tokudb引擎,然后改表的引擎。

    准备好mysql 5.6.25,mysql 5.7.21,percona-5.7.22(全部放到一个指定路径,届时软链就是),percona server下载地址:

    https://www.percona.com/downloads/Percona-Server-LATEST/Percona-Server-5.7.22-22/binary/tarball/Percona-Server-5.7.22-22-Linux.x86_64.ssl101.tar.gz

    升级前(有一个db01库,里面有一张t1表):

    mysql> use db01
    Database changed
    mysql> show create table t1G
    *************************** 1. row ***************************
           Table: t1
    Create Table: CREATE TABLE `t1` (
      `id` int(11) DEFAULT NULL,
      `name` varchar(200) DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      KEY `id` (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    
    mysql> select version();
    +------------+
    | version()  |
    +------------+
    | 5.5.24-log |
    +------------+
    1 row in set (0.00 sec)
    
    mysql> 

    关闭数据库:

    mysql> set global innodb_fast_shutdown=0;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> 
    /usr/local/mysql/bin/mysqladmin -uroot -p -S /data/mysql/3306/mysqltmp/mysql.sock shutdown

    调整软连接,用5.6.25启动(配置文件用5.5的还可以,在用5.7的版本启动的时候就需要适当的更改,可以找一份5.7的配置),软件习惯放在/usr/local下面

    rm -f mysql
    ln -s /usr/local/mysql-5.6.25 mysql

    启动mysql

    /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/3306/my.cnf --user=mysql &

    在启动以后查看错误日志:

    2018-11-22 16:42:33 21876 [ERROR] Native table 'performance_schema'.'events_statements_summary_by_thread_by_event_name' has the wrong structure
    2018-11-22 16:42:33 21876 [ERROR] Native table 'performance_schema'.'events_statements_summary_by_account_by_event_name' has the wrong structure
    2018-11-22 16:42:33 21876 [ERROR] Native table 'performance_schema'.'events_statements_summary_by_user_by_event_name' has the wrong structure

    有这些是正常的,我们需要运行mysql_upgrade

    /usr/local/mysql/bin/mysql_upgrade -uroot -p -S /data/mysql/3306/mysqltmp/mysql.sock 

    查看版本:

    mysql> select version();
    +------------+
    | version()  |
    +------------+
    | 5.6.25-log |
    +------------+
    1 row in set (0.00 sec)

    在数据目录下面也有一个文件记录升级版本:mysql_upgrade_info
    到这里就从5.5.24升级到了5.6.25. 然后需要从5.6.25升级到5.7.21,这个过程其实是一样的。就不再阐述。我直接略过。

    我这里升级到了5.7.21:

    [root@localhost][(none)]> select version();
    +------------+
    | version()  |
    +------------+
    | 5.7.21-log |
    +------------+
    1 row in set (0.00 sec)

    下面开始从mysql 5.7.21升级到percona 5.7.22. 正常关闭mysql,删掉软连接,从新软链。

    mysql -> /usr/local/percona-5.7.22/

    启动percona mysql前需要关闭THP

    echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
    echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag

     启动percona mysql并且安装tokudb。

    /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/3306/my.cnf --user=mysql &

    启用tokudb引擎:

    ps_tokudb_admin --enable -uroot -S /data/mysql/3306/mysqltmp/mysql.sock -p --defaults-file=/data/mysql/3306/my.cnf

    输出如下表示成功:

    Installing TokuDB engine...
    INFO: Successfully installed TokuDB engine plugin.
    mysql> SELECT @@tokudb_version;
    +------------------+
    | @@tokudb_version |
    +------------------+
    | 5.7.22-22        |
    +------------------+
    1 row in set (0.00 sec)

    可以看到已经安装成功。

    但是有一个问题就是tokudb的数据目录默认在innodb的数据目录下面:

    -rw-rw----. 1 mysql mysql    56 Nov 22 16:42 auto.cnf
    drwx------. 2 mysql mysql    45 Nov 20 17:05 db01
    -rw-------. 1 mysql mysql  1172 Nov 22 17:04 log000000000000.tokulog29
    drwx------. 2 mysql root   4096 Nov 22 16:49 mysql
    -rw-rw-r--. 1 root  root      6 Nov 22 16:49 mysql_upgrade_info
    drwxr-x---. 2 mysql mysql  8192 Nov 22 16:49 performance_schema
    -rw-------. 1 mysql mysql  1676 Nov 22 17:01 private_key.pem
    -rw-r--r--. 1 mysql mysql   452 Nov 22 17:01 public_key.pem
    drwxr-x---. 2 mysql mysql  8192 Nov 22 16:49 sys
    -rw-r-----. 1 mysql mysql 16384 Nov 22 17:02 tokudb.directory
    -rw-r-----. 1 mysql mysql 16384 Nov 22 17:02 tokudb.environment
    -rw-------. 1 mysql mysql     0 Nov 22 17:02 __tokudb_lock_dont_delete_me_data
    -rw-------. 1 mysql mysql     0 Nov 22 17:02 __tokudb_lock_dont_delete_me_environment
    -rw-------. 1 mysql mysql     0 Nov 22 17:02 __tokudb_lock_dont_delete_me_logs
    -rw-------. 1 mysql mysql     0 Nov 22 17:02 __tokudb_lock_dont_delete_me_recovery
    -rw-------. 1 mysql mysql     0 Nov 22 17:02 __tokudb_lock_dont_delete_me_temp
    -rw-r-----. 1 mysql mysql 16384 Nov 22 17:02 tokudb.rollback

    可以看见全部放在一起了,这怎么能够忍受呢。肯定改啊。关于有数据的修改tokudb的数据目录需要非常小心。官网参考地址:修改tokudb数据存放位置
    下面我们开始移动,首先关闭mysql,然后创建tokudb存放数据的目录。

    mkdir /data/mysql/3306/tokudata -p
    chown -R mysql.mysql /data/mysql/3306/tokudata

    配置文件增加:

    tokudb_data_dir               = /data/mysql/3306/tokudata
    tokudb_tmp_dir                = /data/mysql/3306/tokudata
    tokudb_log_dir                = /data/mysql/3306/tokudata
    innodb_use_native_aio         = 0

    日志文件,临时文件,数据目录都是/data/mysql/3306/tokudata,当然你可以分的更详细。然后移动文件:
    按照官网:*.tokudb 及 __tokudb_lock_dont_delete_me_data 存放位置

    1. 修改 tokudb_data_dir = /data/mysql/3306/tokudata

    mv /data/mysql/3306/data/__tokudb_lock_dont_delete_me_data /data/mysql/3306/tokudata/

    2. 修改 tokudb_tmp_dir = /data/mysql/3306/tokudata

    tokudb_tmp_dir 默认会读取 tokudb_data_dir 这个值,所以需要移动以及在配置文件显示指定。

    mv /data/mysql/3306/data/__tokudb_lock_dont_delete_me_temp /data/mysql/3306/tokudata/

    3. 修改 tokudb_log_dir = /data/mysql/3306/tokudata

    mv /data/mysql/3306/data/log000000000000.tokulog29 /data/mysql/3306/tokudata    
    mv /data/mysql/3306/data/__tokudb_lock_dont_delete_me_logs /data/mysql/3306/tokudata/

    4. 最后移动__tokudb_lock_dont_delete_me_recovery

    mv /data/mysql/3306/data/__tokudb_lock_dont_delete_me_recovery  /data/mysql/3306/tokudata/
    ll /data/mysql/3306/tokudata/
    total 4
    -rw-------. 1 mysql mysql 2723 Nov 22 17:09 log000000000000.tokulog29
    -rw-------. 1 mysql mysql    0 Nov 22 17:02 __tokudb_lock_dont_delete_me_data
    -rw-------. 1 mysql mysql    0 Nov 22 17:02 __tokudb_lock_dont_delete_me_logs
    -rw-------. 1 mysql mysql    0 Nov 22 17:02 __tokudb_lock_dont_delete_me_recovery
    -rw-------. 1 mysql mysql    0 Nov 22 17:02 __tokudb_lock_dont_delete_me_temp

    启动percona mysql,启动完成以后注意查看一下错误日志有没有异常。然后再一次检查tokudb引擎是否启用了:

    mysql> SELECT @@tokudb_version;
    +------------------+
    | @@tokudb_version |
    +------------------+
    | 5.7.22-22        |
    +------------------+
    1 row in set (0.00 sec)

    至此已经升级到了percona 5.7.22,并且启用了tokudb引擎而且也改了数据目录。我们把原来的t1表的引擎修改成tokudb引擎看看。压缩算法有好多种,有兴趣的自行了解。

    mysql> show create table t1G                             
    *************************** 1. row ***************************
           Table: t1
    Create Table: CREATE TABLE `t1` (
      `id` int(11) DEFAULT NULL,
      `name` varchar(200) DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      KEY `id` (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    
    mysql> alter table t1 row_format=TOKUDB_LZMA engine=tokudb;
    Query OK, 1 row affected (0.13 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> show create table t1G                              
    *************************** 1. row ***************************
           Table: t1
    Create Table: CREATE TABLE `t1` (
      `id` int(11) DEFAULT NULL,
      `name` varchar(200) DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      KEY `id` (`id`)
    ) ENGINE=TokuDB DEFAULT CHARSET=utf8 ROW_FORMAT=TOKUDB_LZMA
    1 row in set (0.00 sec)
    
    mysql> 

    查看数据目录,数据也存放在了我们指定的位置:

    /data/mysql/3306/tokudata/db01
    [root@localhost]# ll
    total 128
    -rw-r-----. 1 mysql mysql 32768 Nov 22 17:26 t1_key_id_8_2_1d.tokudb
    -rw-r-----. 1 mysql mysql 32768 Nov 22 17:26 t1_main_8_3_1d.tokudb
    -rw-r-----. 1 mysql mysql 65536 Nov 22 17:26 t1_status_8_4_1d.tokudb

      

  • 相关阅读:
    iOS.UI_正则表达式(特殊字符)
    iOS.UI_正则(电话号码)
    iOS远程推送h获取Token
    CoreData教学完整版(封装我们自己的CoreData工具)_Dylan
    Swift基础加强_跟我打500行
    xmpp好友请求5
    XMPP教学小结1
    xmpp好友状态4
    XMPP好友列表3
    XMPP收发消息2
  • 原文地址:https://www.cnblogs.com/gomysql/p/10001927.html
Copyright © 2011-2022 走看看