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
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)的更多相关文章
- java连接mysql数据库详细步骤解析
java连接mysql数据库详细步骤解析 第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar 第二步:导入下载的J ...
- mysql安装详细步骤图解
本文转自http://blog.csdn.net/fanyunlei/article/details/21454645 别看图多,其实mysql的安装十分简单,一路next即可,只是注意倒数第三步,设 ...
- Linux下python安装升级详细步骤 | Python2 升级 Python3
Linux下python升级步骤 Python2 ->Python3 多数情况下,系统自动的Python版本是2.x 或者yum直接安装的也是2.x 但是,现在多数情况下建议使用3.x 那么如 ...
- C++使用Mysql的详细步骤及各个常用方法的代码演示:select,insert,update,delete
这几天一直在学习C++下使用Mysql的方法及其中各种的问题,也看了很多Mysql的API函数,当然自己看的还是很基础的.其实对于每种数据库的操作,基本的方法都是非常类似的,大多都是connect,s ...
- Linux下python安装升级详细步骤 | Python2 升级 Python3 转载
Linux下python升级步骤 Python2 ->Python3 多数情况下,系统自动的Python版本是2.x 或者yum直接安装的也是2.x 但是,现在多数情况下建议使用3.x 那么如 ...
- weblogic补丁升级详细步骤,18.7.17补丁更新
weblogic打补丁 到weblogic官网下载补丁包 对应的补丁包 如: p22248372_1036012_Generic.zip 一 安装补丁步骤 1.登录linux的weblogic用户 ...
- 阿里云服务器上安装mysql的详细步骤
阿里云安装mysql (1)下载mysql安装包,去mysql官网下载对应的包 mysql数据库官方下载网址: https://downloads.mysql.com/archives/commu ...
- Linux 上通过binlog文件 恢复mysql 数据库详细步骤
一.binlog 介绍 服务器的二进制日志记录着该数据库的所有增删改的操作日志(前提是要在自己的服务器上开启binlog),还包括了这些操作的执行时间.为了显示这些二进制内容,我们可以使用mysqlb ...
- 安装MySQL的详细步骤
安装步骤如下: 1.打开网址:http://www.mysql.com/ ↓ 2.选择“Download”->“Windows”(此安装步骤只是在Window10 中进行,如有需要,其他系统可参 ...
随机推荐
- WCF账户密码认证
记录一下我实现WCF用户认证与权限控制的实现方法, 也让其他网友少走一些弯路. 内容写得非常小白(因为我也是小白嘛), 比较详细, 方便WCF知识基础薄的朋友 主要分为下面几个步骤 作为例子, 创建最 ...
- hdu 5534 (完全背包) Partial Tree
题目:这里 题意: 感觉并不能表达清楚题意,所以 Problem Description In mathematics, and more specifically in graph theory, ...
- 【随笔】Linux服务器备份相关
服务器数据的安全性一直都是服务器日常管理的重中之重.Linux服务器虚拟化虽然以其高度可靠的作业系统而闻名,不过系统失效仍然可能发生.可能因为硬体故障,电源中断,或其他不可预料的问题.更常见的这 些问 ...
- 前端工作面试问题--摘取自github
前端工作面试问题 本文包含了一些用于考查候选者的前端面试问题.不建议对单个候选者问及每个问题 (那需要好几个小时).只要从列表里挑选一些,就能帮助你考查候选者是否具备所需要的技能. 备注: 这些问题中 ...
- Nginx密码验证 ngx_http_auth_basic_module模块
有时候我们需要限制某些目录只允许指定的用户才可以访问,我们可以给指定的目录添加一个用户限制. nginx给我们提供了ngx_http_auth_basic_module模块来实现这个功能. 模块ngx ...
- Linux系统编程温故知新系列 --- 01
1.大端法与小端法 大端法:按照从最高有效字节到最低有效字节的顺序存储,称为大端法 小端法:按照从最低有效字节到最高有效字节的顺序存储,称为小端法 网际协议使用大端字节序来传送TCP分节中的多字节整数 ...
- [Gnu]Centos7 解决 gdb 提示 Missing separate debuginfos
Centos7 上使用gdb: $ gdb php $ run /home/www/2.php 运行完 run,后面跟着很长的提示: …. Missing separate debuginfos, u ...
- shell学习--grep2
grep相关的练习,解释下面grep表达式的含义: grep '\<Tom\>' file 打印file中包含单词 Tom的行 grep 'Tome Savage' file 打印file ...
- cannot determine the location of the vs common tools folder
问题:打开"VS2010开发人员命令提示后",上面提示"cannot determine the location of the vs common tools fold ...
- C++面试中关于sizeof问题总结
原文:http://blog.sina.com.cn/s/blog_7c983ca60100yfdv.html#SinaEditor_Temp_FontName (1) sizeof是操作符 ...