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

Percona5.5.txt

MySQL 升级详细步骤 (包括 Percona)的更多相关文章

  1. java连接mysql数据库详细步骤解析

    java连接mysql数据库详细步骤解析      第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar      第二步:导入下载的J ...

  2. mysql安装详细步骤图解

    本文转自http://blog.csdn.net/fanyunlei/article/details/21454645 别看图多,其实mysql的安装十分简单,一路next即可,只是注意倒数第三步,设 ...

  3. Linux下python安装升级详细步骤 | Python2 升级 Python3

    Linux下python升级步骤  Python2 ->Python3 多数情况下,系统自动的Python版本是2.x 或者yum直接安装的也是2.x 但是,现在多数情况下建议使用3.x 那么如 ...

  4. C++使用Mysql的详细步骤及各个常用方法的代码演示:select,insert,update,delete

    这几天一直在学习C++下使用Mysql的方法及其中各种的问题,也看了很多Mysql的API函数,当然自己看的还是很基础的.其实对于每种数据库的操作,基本的方法都是非常类似的,大多都是connect,s ...

  5. Linux下python安装升级详细步骤 | Python2 升级 Python3 转载

    Linux下python升级步骤  Python2 ->Python3 多数情况下,系统自动的Python版本是2.x 或者yum直接安装的也是2.x 但是,现在多数情况下建议使用3.x 那么如 ...

  6. weblogic补丁升级详细步骤,18.7.17补丁更新

    weblogic打补丁 到weblogic官网下载补丁包 对应的补丁包  如: p22248372_1036012_Generic.zip 一  安装补丁步骤 1.登录linux的weblogic用户 ...

  7. 阿里云服务器上安装mysql的详细步骤

    阿里云安装mysql (1)下载mysql安装包,去mysql官网下载对应的包 mysql数据库官方下载网址:   https://downloads.mysql.com/archives/commu ...

  8. Linux 上通过binlog文件 恢复mysql 数据库详细步骤

    一.binlog 介绍 服务器的二进制日志记录着该数据库的所有增删改的操作日志(前提是要在自己的服务器上开启binlog),还包括了这些操作的执行时间.为了显示这些二进制内容,我们可以使用mysqlb ...

  9. 安装MySQL的详细步骤

    安装步骤如下: 1.打开网址:http://www.mysql.com/ ↓ 2.选择“Download”->“Windows”(此安装步骤只是在Window10 中进行,如有需要,其他系统可参 ...

随机推荐

  1. JavaScript导出excel文件实现

    function getXlsFromTbl(inTblId, inWindow, fname) { try { var allStr = ""; var curStr = &qu ...

  2. ArcEngine编辑保存错误:Unable to create logfile system tables

    通过ArcEngine对多个SDE中多个图层进行批量编辑处理,其中有部分图层在结束编辑的时候出现错误提示(部分图层可以,只有两个数据较多的图层保存失败). 错误信息:Unable to create ...

  3. svchost占用cpu

    发现有一个svchost始终占用cpu. 查看任务管理器PID列,在tasklist /svc中查找相关列,对应若干服务. 一个一个检查这些服务,确认是windows update服务引起,停止win ...

  4. AngularJs自定义指令详解(7) - multiElement

    multiElement不太常用,从下面这个例子可以大致看出它的作用: <!DOCTYPE html> <html> <head lang="en"& ...

  5. [10]APUE:信号

    [a] 常用信号 SIGABRT 调用 abort 函数时产生此信号,进程异常终止 SIGALRM 调用 alarm 或 setitimer 函数超时之后产生 SIGCHLD 子进程终止或 stop ...

  6. QQ邮箱发送邮件,出现mail from address must be same as authorization user错误

    之前做的一个系统,有个发送邮件的功能,一直能正常使用,今天同事说QQ邮箱发送不了. 立马着手调试,发现服务器一直出现“mail from address must be same as authori ...

  7. 来自MarsEdit的博客测试

    使用MarsEdit编辑的第一个测试博客. 希望我们一帆风顺! 插图,在插图时可以调整尺寸:   六种公式写法,记得要在选项中打开-启用数学公式: \begin{equation}\sum\end{e ...

  8. 找出一个二维数组中的"鞍点",即该位置上的元素在该行中最大,在该列中最小(也可能没有"鞍点"),打印有关信息.(提示:注意特殊情况:没鞍点或多个鞍点)

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { ][] = {}; ;i < ...

  9. ASP.net分别连接SQLserver数据库与连接Access数据库精英版

    -------------------------连接access2003 字符串------------------------- Provider=Microsoft.Jet.OLEDB.4.0; ...

  10. Java程序员从笨鸟到菜鸟之(一百零一)sql注入攻击详解(二)sql注入过程详解

    在上篇博客中我们分析了sql注入的原理,今天我们就来看一下sql注入的整体过程,也就是说如何进行sql注入,由于本人数据库和网络方面知识有限,此文章是对网上大量同类文章的分析与总结,其中有不少直接引用 ...