ySQL 4.*或5.0.*的升级指南
ySQL 4.*或5.0.*的升级指南
1.直接升级,建议从4.1 => 5.0移动
4.1的myisam存储引擎已经足够成熟了,它允许直接升级到下一个MySQL的主版本。
注意:对于MERGE表来说不是这样。如果你尝试直接升级这种很少用的表类型你可能会陷入麻烦。你应该清除并重建这些表,并且在升级过程中把他们的内容储存起来。如果你不太确定,你应该从Upgrading from old versions of MySQL开始。 |
在这一步需要两个命令行,因为lock属于mysql会话。
代码1.1: 直接从4.1升级至5.0.* |
# quickpkg dev-db/mysql |
2.从旧的MySQL版本升级
用户从老的MySQL版本(<4.0.24)升级需要现安装MySQL 4.0.25。如果你已有一个更新的版本,你可以跳过这一区域,并从next one继续。
代码2.1: 简单升级 |
# emerge -av --buildpkg "<mysql-4.1" |
3.为你当前的数据做备份
重要:在不同的MySQl版本中主键的值的处理方式是不一样的,请参见bug #108502来得到更多信息,极其推荐你扫描“0”(zero)或更小的值,并且升级它们到一个大于等于“1”的值。 |
所有数据库管理员必须做的最重要的任务之一就是备份数据,那我们就开始吧:
代码3.1: 所有数据库的dump |
# mysqldump \ |
现在一个叫做BACKUP_MYSQL_4.0.SQL的文件应该存在,它可以在后面你重建数据时起到作用。数据是被SQL的MySQL语言描述的,它是一种结构化查询语言。
现在是检查你的备份是否正常工作的好时间了。
4.从最近的MySQL版本升级
如果你跳过了step #1,你现在必须创建一个最近安装的版本的备份包(是数据服务的,不是数据的):
代码4.1: 二进制包备份 |
# quickpkg dev-db/mysql |
现在是时间吧最近的版本和它所有的数据清理干净了:
代码4.2: 卸载MySQL |
# /etc/init.d/mysql stop |
注意:现在两个不同的备份应该存在:SQL的一个,这个在不同版本间是轻便的,另一个允许你快速恢复你的数据库。更多的细节将会在后面提到。 |
当你摆脱了旧的MySQl安装后,你现在可以安装新的版本了。记住必须用revdep-rebuild来rebuild与MySQL有联系的包。
代码4.3: 升级二进制包 |
# emerge -av ">mysql-4.1" |
现在配置新安装的MySQl版本并重启实例:
代码4.4: 配置MySQL4.1的基本安装 |
# emerge --config =mysql-4.1.<micro_version> |
最后你可以导入在step #2所创建的备份。
重要:默认的/etc/mysql/my.cnf文件默认设置了二进制的登陆(log-bin)。它会记录每一个对数据的修改操作。如果你运行一个非常大的数据库(大于等于1GB),它会创建极大的文件,并且迅速地用掉磁盘空间。如果你空间不够,禁用二进制登陆会是个好主意。 |
重要:在MySQL4.1和之前的版本默认的编码是utf8。如果数据包含了non-ASCII编码,你可能想要保持数据库默认的编码设置,通过使用在/etc/mysql/my.cnf文件里的latin1替换所有的utf8的东西。在Charset conversion这一章可以找到更多的信息。 |
重要:管理的mysql数据库包括用户名、密码之间的其它东西must被编码为utf8。 |
当一个未知的键被包含时,较老的mysqldump组件可能会使用错误的指令来导出表。为了解决这个问题,用一下声明来包住SQL:
代码4.5: 修复foreign key checks |
SET FOREIGN_KEY_CHECKS=0 |
接下来,导入备份
代码4.6: 导入MySQL备份 |
# cat BACKUP_MYSQL_4.0.SQL \ |
如果你现在重启MySQL服务并且所有的事都按预料进行,你就有了一个完全运行的4.1.x的MySQL版本。
代码4.7: 重启MySQL实例 |
# /etc/init.d/mysql restart |
如果当你在升级时遇到任何问题,请把它们报告到Bugzilla。
5.恢复旧的MySQL 4.0安装
如果你不喜欢MySQL 4.1,你可以回到MySQL 4.0。
代码5.1: 恢复到上一个版本 |
# /etc/init.d/mysql stop |
重要:如果依据这个指南dev-db/mysql以外的包被编译安装了,你必须运行revdep-rebuild来确保每一个客户端使用了正确的mysql客户端共享组件。 |
6.字符转换:
介绍
这一章并不打算成为一个如何做这样的转换的详尽的指南,反倒要成为一个读者可以推敲的短小的提示列表。
转换一个数据库可能是一个复杂的任务,并且难度随着数据的不同而增加。像serialized object和blobs是一个例子来说明把碎片弄在一起是很难的。
索引
每个utf-8字符连索引在内一共占3Byte。MySQL里的索引可以达到1000Byte那么长(767Byte是InnoDB表)。请记住限制使用Byte来衡量的,然而卷的长度是用字符的数量来解释的。
MySQL也可以在column的一部分创建索引,这可能有些帮助。下面是一些例子:
代码6.1: 使用prefixes索引 |
$ mysql -uroot -p'your_password' test |
环境
系统必须配置成支持UTF-8编码。你会在我们的Using UTF-8 with Gentoo和Localization Guide文档里发现更多信息。
在这个例子里,我们设置一些在/etc/env.d/02locale文件里的环境变量来利用英文的UTF-8编码:
代码6.2: /etc/env.d/02locale |
LC_ALL=en_US.UTF-8 |
接下来请确定运行env-update && source /etc/profile。
iconv
由sys-libs/glibc提供的iconv是用来将文本文件从一个编码转换到另一个编码的工具。你也可以使用app-text/recode。
代码6.3: 使用iconv |
(从latin1到utf8) |
iconv可以在环境不是设置成utf8时记录一个sql的dump。
SQL矫正
你可以使用CONVERT()和CAST()这两个MySQL函数来转换在你的SQL脚本中的数据。
Apache(web服务器)
为了apache使用utf8,你必须调节以下在httpd.conf文件里的变量:AddDefaultCharset,CharsetDefault和CharsetSourceEnc。如果你的html文件源码没有用utf8编码,那它们必须经过iconv或者recode的转换。
更多相关文章
- MySQL5.7.11版本,64位绿色版安装
- 在arcpy中删除或删除表的代码是什么?
- iBatis中sqlmap resultclass="java.lang.Integer",在代码中如何
- 已有SQLSERVER表如何生成其代码?
- PHP执行.SQL文件的实例代码分享
- Linux操作系统Centos7.2版本搭建Apache+PHP+Mysql环境
- 要在SQL数据库中根据身份证号码查询出性别(有15位的,也有18位的),怎
- MySQL——问题:mysql(5.7版本)目录下没有data文件夹
- 内网安装mysql主从服务,mysql版本5.6.38-winx64