ySQL 4.*或5.0.*的升级指南
来源:互联网 发布:mysql高并发写入方案 编辑:程序博客网 时间:2024/05/21 03:29
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# alias MYSQL="mysql --user=root --password='your_password'"# DATADIR=$(MYSQL --batch --raw --silent --skip-column-names \ --execute='SHOW variables LIKE "datadir";' \ | sed -e 's|datadir[ \t]||')(下一步应该在第二个命令行下做)# mysql --user=root --password='your_password'mysql> FLUSH TABLES WITH READ LOCK;(回到第一个命令行来运行这个命令)# tar -cjpvf ~/mysql.$(date +%F"T"%H-%M).tar.bz2 \ /etc/conf.d/mysql /etc/mysql/my.cnf "${DATADIR}"(接下来的命令应该在第二个命令行下做)mysql> UNLOCK TABLES;mysql> quit(回到第一个命令行来完成接下来的升级)# tar -tjvf ~/mysql.*.tar.bz2# emerge -av ">dev-db/mysql-5.0"# dispatch-conf# revdep-rebuild# /etc/init.d/mysql restart# mysql_upgrade_shell --user=root --password='your_password' \ --protocol=tcp --datadir="${DATADIR}"# /etc/init.d/mysql restart# unset DATADIR# unalias 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 \ -uroot \ --password='your_password' \ -hlocalhost \ --all-databases \ --opt \ --allow-keywords \ --flush-logs \ --hex-blob \ --master-data \ --max_allowed_packet=16M \ --quote-names \ --result-file=BACKUP_MYSQL_4.0.SQL
现在一个叫做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# emerge -C mysql# tar cjpvf ~/mysql.$(date +%F"T"%H-%M).tar.bz2 /etc/mysql/my.cnf /var/lib/mysql/# ls -l ~/mysql.*# rm -rf /var/lib/mysql/ /var/log/mysql
注意: 现在两个不同的备份应该存在:SQL的一个,这个在不同版本间是轻便的,另一个允许你快速恢复你的数据库。更多的细节将会在后面提到。
当你摆脱了旧的MySQl安装后,你现在可以安装新的版本了。记住必须用revdep-rebuild来rebuild与MySQL有联系的包。
代码 4.3: 升级二进制包
# emerge -av ">mysql-4.1"(你也可以用dispatch-conf来升级你的配置文件)# etc-update# revdep-rebuild
现在配置新安装的MySQl版本并重启实例:
代码 4.4: 配置MySQL4.1的基本安装
# emerge --config =mysql-4.1.<micro_version># /etc/init.d/mysql start
最后你可以导入在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=0SET FOREIGN_KEY_CHECKS=1
接下来,导入备份
代码 4.6: 导入MySQL备份
# cat BACKUP_MYSQL_4.0.SQL \ | mysql \ -uroot \ --password='your_password' \ -hlocalhost \ --max_allowed_packet=16M# mysql_fix_privilege_tables \ --defaults-file=/etc/mysql/my.cnf \ --user=root \ --password='your_password'
如果你现在重启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# emerge -C mysql# rm -rf /var/lib/mysql/ /var/log/mysql# emerge --usepkgonly "<mysql-4.1"(使用创建备份时的那个来代替 <timestamp>。)# tar -xjpvf mysql.<timestamp>.tar.bz2 -C /# /etc/init.d/mysql start
重要: 如果依据这个指南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' testmysql> SHOW variables LIKE "version" \G*************************** 1. row ***************************Variable_name: version Value: 5.0.24-log1 row in set (0.00 sec)mysql> CREATE TABLE t1 ( -> c1 varchar(255) NOT NULL default '', -> c2 varchar(255) NOT NULL default '' -> ) ENGINE=MyISAM DEFAULT CHARSET=utf8;Query OK, 0 rows affected (0.01 sec)mysql> ALTER TABLE t1 -> ADD INDEX idx1 ( c1 , c2 );ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytesmysql> ALTER TABLE t1 -> ADD INDEX idx1 ( c1(165) , c2(165) );Query OK, 0 rows affected (0.01 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> CREATE TABLE t2 ( -> c1 varchar(255) NOT NULL default '', -> c2 varchar(255) NOT NULL default '' -> ) ENGINE=MyISAM DEFAULT CHARSET=sjis;Query OK, 0 rows affected (0.00 sec)mysql> ALTER TABLE t2 -> ADD INDEX idx1 ( c1(250) , c2(250) );Query OK, 0 rows affected (0.03 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> CREATE TABLE t3 ( -> c1 varchar(255) NOT NULL default '', -> c2 varchar(255) NOT NULL default '' -> ) ENGINE=MyISAM DEFAULT CHARSET=latin1;Query OK, 0 rows affected (0.00 sec)mysql> ALTER TABLE t3 -> ADD INDEX idx1 ( c1 , c2 );Query OK, 0 rows affected (0.03 sec)Records: 0 Duplicates: 0 Warnings: 0
环境
系统必须配置成支持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-8LANG=en_US.UTF-8
接下来请确定运行env-update && source /etc/profile。
iconv
由sys-libs/glibc提供的iconv是用来将文本文件从一个编码转换到另一个编码的工具。你也可以使用app-text/recode。
代码 6.3: 使用iconv
(从latin1到utf8)$ iconv -f ISO-8859-15 -t UTF-8 file1.sql > file2.sql(从日语到utf8)$ iconv -f ISO2022JP -t UTF-8 file1.sql > file2.sql
iconv可以在环境不是设置成utf8时记录一个sql的dump。
SQL矫正
你可以使用CONVERT()和CAST()这两个MySQL函数来转换在你的SQL脚本中的数据。
Apache(web服务器)
为了apache使用utf8,你必须调节以下在httpd.conf文件里的变量:AddDefaultCharset,CharsetDefault和CharsetSourceEnc。如果你的html文件源码没有用utf8编码,那它们必须经过iconv或者recode的转换。
- ySQL 4.*或5.0.*的升级指南
- ysql索引建立的原则
- Ext JS的升级指南
- nginx 升级指南,最详细的nginx升级步骤
- JConsole 的升级版 VisualVM 入门指南
- ySQL性能优化的21个最佳实践和mysql使用索引
- CDH的Cloudera Manage安装或升级
- 大型核心系统的升级或迁移
- 用apt+synaptic 在线安装或升级Fedora core 4.0 软件包── 为新手指南
- Linux内核升级指南
- Openfire 升级指南
- jQuery 1.9升级指南
- Mapr升级指南
- struts2漏洞升级指南
- Polymer 1.0 升级指南
- HTTPS 升级指南
- HTTPS 升级指南
- HTTPS 升级指南
- 新学期一水
- JQuery事件执行与DOM加载
- Convert Sorted Array to Binary Search Tree
- SEO公式小议
- 手机可以模拟NFC卡片吗?项目中如何解决不能模拟NFC Tag UID的问题
- ySQL 4.*或5.0.*的升级指南
- android之知识点小结一
- FusionCharts导出图表常见问题(FAQ)汇总---FusionCharts常见问题大全
- 位置无关代码(PIC)的思考
- FusionCharts加载多个flash图表的方法
- FusionCharts使用问题及解决方法(一)-FusionCharts常见问题大全
- 有道云笔记的使用
- FusionCharts使用问题及解决方法(二)-FusionCharts常见问题大全
- FusionCharts使用问题及解决方法(三)-FusionCharts常见问题大全