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 中进行,如有需要,其他系统可参 ...
随机推荐
- [刘阳Java]_快速搭建MyBatis环境_第2讲
1.MyBatis的环境配置 导入MyBatis包, mybatis-3.2.8.jar 导入MySQL驱动包, mysql-connector-java-5.1.24-bin.jar 创建表的实体类 ...
- JavaScript之作用域和引用类型
学习js高级程序设计第四.五章 4.1基本类型和引用类型的值:基本类型值指的是简单的数据段,引用类型值指可能由多个值构成的对象. 引用类型的值是保存在内存中的对象,不能直接访问,而是按引用访问(类似指 ...
- memcached+magent实现memcached集群
首先说明下memcached存在如下问题 本身没有内置分布式功能,无法实现使用多台Memcache服务器来存储不同的数据,最大程度的使用相同的资源:无法同步数据,容易造成单点故障.(memagent代 ...
- (转)testng对失败时截图处理
写这篇微博之前,自动化测试代码中有对于失败测试截图的功能,但是却散落在各个catch语句块中.不便于以后的扩展和维护,AOP思想里说明是面向切面编程,把公共的组件提取出来,可以单独修改维护. 但是直到 ...
- tnsnames.ora配置注意(连接新的数据库)
文件地址D:\app\think\product\11.2.0\instantclient_11_2\network\admin\tnsnames.ora# tnsnames.ora Network ...
- UIView中间透明周围半透明(四种方法)
方法一 #import "DrawView.h" @implementation DrawView - (instancetype)initWithFrame:(CGRect)fr ...
- Visual Studio2008环境下查找C#中方法的“查看所有引用”
在Visual Studio开发环境下,想必F12我们都很熟悉了,有没有用过“查看所有引用”呢? 尤其是在一个解决方案中,包含了很多项目,彼此相互的调用是很常见的,例如三层架构, BLL调用DAL,D ...
- Oracle 身份证校验
SELECT SUBSTR('&AI', 0, 17) || TRANSLATE(DECODE(MOD(SUM(SUBSTR(WI, REGEXP_INSTR(WI, ' ', 1, I) + ...
- Nginx禁止ip访问或IP网段访问方法
Nginx禁止ip访问可以防止指定IP访问我们的网站,本例子可以实现是防止单IP访问或IP网段访问了,非常的有用我们一起来看看吧. 常用的linux做法 iptables参考规则 代码如下 复制代码 ...
- Linux_arm驱动之按键模拟脉冲实现定时器的精确计时
/***************************************************************** 内核驱动部分button_ker.c ************** ...