首页 数据库 mysql教程 MySQL升级:从4.1到5.0

MySQL升级:从4.1到5.0

Jun 07, 2016 pm 04:04 PM
mysql 升级 安装 提示 新版本

提示:在安装任何新版本的软件之前,最好备份一下你的数据。尽管mysql已经最大限度的保证高质量服务,但当你使用软件的测试发布版本时,你还是应该采取备份的方式来保护你的数据。大体来说,在从mysql从4.1升级到5.0时,你需要做得主要包括以下几个步骤: 这

提示:在安装任何新版本的软件之前,最好备份一下你的数据。尽管mysql已经最大限度的保证高质量服务,但当你使用软件的测试发布版本时,你还是应该采取备份的方式来保护你的数据。大体来说,在从mysql从4.1升级到5.0时,你需要做得主要包括以下几个步骤:
•这部分主要检查稍后建立起的修改列表里的表项,目的是为了查找其中是否存在会影响你的应用程序的表项。这里具体要注意哪些标志着Incompatible change的选项;这些会造成与Mysql早期版本不匹配,并且应该在更新之前引起你的注意。
•阅读MySQL 5.0的历史进程,理解你在5.0中能够使用的重要的新特征。可以参阅Section D.1, “Changes in release 5.0.x (Production)”
•如果你是在Windows下运行Mysql 服务器,请参阅Section 2.3.15, “Upgrading MySQL on Windows”部分。同时你也应该注意到Windows下的Mysql服务器中有两个是重新命名的,具体可以参阅Section 2.3.9, “Selecting a MySQL Server type”
•MySQL 5.0增加了对于存储信息的程序的支持。该项支持需要在你的mysql数据库中的proc数据表。为了生成该文件,你应该运行mysql_fix_privilege_tables脚本,有关该脚本的描述,请参阅Section 2.10.3, “Upgrading the Grant Tables”。
•MySQL5.0添加了浏览功能。该项支持需要在mysql数据库中的user和db表格中添加额外的特殊权限列。为了生成这些列,你应该运行mysql_fix_privilege_tables脚本,具体的描述见Section 2.10.3, “Upgrading the Grant Tables”.
•如果你使用复制功能,请参阅Section 6.6, “Upgrading a Replication Setup”,该部分主要提供了升级你的复制设置的相关信息。 几个可视化行为已经在MySQL 4.1和MySQL5.0之间被改变,目的是为了保证MySQL和标准SQL的兼容性。这些改变有可能影响你的应用程序。 下面的列项主要描述了有可能影响应用程序的变化,因此你应该在将MySQL更新到版本5.0之前特别注意这些列项。
几个变化:
•不兼容变化:对于InnoDB和MyISAM表格的TEXT列中的末端空间的索引顺序改变了。从版本5.0.3开始,TEXT索引被看作是末尾的填补空间部分(如同MySQL的数据类型中的char、VARCHAR和TEXT域)。如果你在文本列中有一个索引,那么你应该在其上运行CHECK TABLE命令。如果该检查报错,则需重建索引:如果是一个InnoDB表格,则清除并重新装载该表格,如果它是个MyISAM表格则运行OPTIMIZE TABLE 或者 REPAIR TABLE命令。
•不兼容变化:含有DECIMAL 列的MyISAM 和InnoDB表格将会在升级到MySQL 5.0.6后出现损坏。在更新之前,要先将这些表格采用mysqldump进行清除,同时在更新之后重新装载它们。(当在MySQL5.0.6中生成的这些表格在较低版本如MySQL 5.0.3到 5.0.5中使用时,同样的不匹配情况会发生)
•不兼容变化:对于MySQL 5.0.3,服务器默认不再加载用户定义的函数除非它们除了主函数符号外至少还有一个辅助标记(例如,xxx_init或者xxx_deinit符号)。该行为可以被--allow-suspicious-udfs选项所忽略。可参阅Section 25.2.3.6, “User-Defined Function Security Precautions”.
•不兼容变化:在MySQL 5.0中更新日志将会被删除掉。如果你事先把它激活的话,你实际上激活的是二进制日志。
•不兼容变化:对于ISAM存储机制的支持已经被删除掉。如果你有任何的ISAM表格,你应该在更新之前对其进行转换。例如将一个ISAM表格转化成使用MyISAM存储机制,可使用以下的声明实现:
ALTER TABLE tbl_name ENGINE = MyISAM; 你数据库中的其他ISAM表格的处理与此相同。
•不兼容变化:在MySQL 5.0中,对于MyISAM表格的RAID选项的支持已被删除。如果你有使用这些选项的表格,你应该在更新之前对其进行转换。一种方法是采取mysqldump命令清除这些表格,编辑dump文件以删除在CREATE TABLE声明中RAID选项,同时重新加载dump文件。另一种方法是使用CREATE TABLE new_tbl ... SELECT raid_tbl声明来制造一个新的RAID表格。然而,该声明中的CREATE TABLE部分必须含有足够的信息来重新生成列和索引的属性,否则列和索引的属性有可能丢失,而不会出现在新表格当中。可参阅Section 13.1.5, “CREATE TABLE Syntax”。
•在一个具体的数据库中,对于RAID表格的.MYD文件存储在数据库目录下,而该目录是在名字含有两个16进制位(即00至ff)数值的子目录中的。在对所有使用RAID选项的表格进行转换后,这些RAID-相关的子目录可能依然存在但是是可以被删除的。在证明他们确实是空的之后,可以手工将他们删除。(如果它们非空的话,则说明有一些RAID表格尚未被转换)。
•在MySQL 5.0.6中,存储例程和触发器的二进制日志已经发生了变化。这个变化主要涉及到安全,复制,数据恢复,有关这方面的讨论请见Section 18.4, “Binary Logging of Stored Routines and Triggers”. 。
SQL 的变化:
•不兼容变化:在MySQL 5.0.10对于触发器的命名空间已经改变。以前的版本中,每个表格中,触发器的名字是唯一的。现在对于schema(数据库)必须是唯一的。这种改变的潜在原因是DROP TRIGGER语法现在使用schema名字而不是表格名(schema在可忽略的情况下是被选择的,即当前的schema将会被使用)。当从以前的版本MySQL 5更新到MySQL5.0.10或者更新的版本时,你必须删除所有的触发器并且重新生成他们,否则的话,在更新之后,DROP TRIGGER将不会起作用。为了实现这个目的,我们特别提供了以下参考步骤:
1 将MySQL版本升级至5.0.10以能够访问INFORMATION_SCHEMA.TRIGGERS表格中的触发器信息(它应该对于5.0.10以前版本的触发器同样有效。)
2 使用下面的SELECT声明来删除所有的触发器定义
SELECT CONCAT('CREATE TRIGGER ', t.TRIGGER_SCHEMA, '.', t.TRIGGER_NAME,' ', t.ACTION_TIMING, ' ', t.EVENT_MANIPULATION , ' ON ', t.EVENT_OBJECT_SCHEMA, '.', t.EVENT_OBJECT_TABLE' FOR EACH ROW ', t.ACTION_STATEMENT, '//' )
INTO OUTFILE '/tmp/triggers.sql'
FROM INFORMATION_SCHEMA.TRIGGERS AS t;
该声明使用INTO OUTFILE,所以你必须拥有FILE权限。该文件将会被在服务器主机上生成;可以根据你的喜好,来选择一个不同的文件名。为了绝对的安全,检查triggers.sql文件中的触发器定义,如果必要的话,对该文件进行一下备份。
1停止服务器同时通过删除你数据库目录中所有的.TRG文件来删除所有的触发器。改变当前路径到你数据库的目录下,同时输入命令如下: shell> rm */*.TRG
2启动服务器,同时使用triggers.sql文件重新生成所有的触发器。在本例子当中,命令如下:
1.mysql> delimiter // ;
2.mysql> source /tmp/triggers.sql //
3使用SHOW TRIGGERS声明来检查是否所有的触发器成功生成。
登录后复制
•不兼容变化:对于MySQL 5.0.15, CHAR()函数返回一个二进制字符串而不是一套连接字符集中的字符串。而一个可供选择的USING charset语句句有可能被用来生成一个具体的字符集。同时,比256字符长的变量有可能被用来生成一个单一的字符集。这些改变有可能造成不匹配。
o  CHAR(ORD('A')) = 'a' is no longer true: 
omysql> SELECT CHAR(ORD('A')) = 'a';
o+----------------------+
o| CHAR(ORD('A')) = 'a' |
o+----------------------+
o|                    0 |
o+----------------------+
登录后复制
为了进行比较,你可以通过增加一个USING语句或者对结果进行转化在非二进制字符集中生成一个结果字符串。
mysql> SELEC CHAR(ORD('A') USING latin1) = 'a';
+-----------------------------------+
| CHAR(ORD('A') USING latin1) = 'a' |
+-----------------------------------+
|                                 1 |
+-----------------------------------+
mysql> SELECT CONVERT(CHAR(ORD('A')) USING latin1) = 'a';
+--------------------------------------------+
| CONVERT(CHAR(ORD('A')) USING latin1) = 'a' |
+--------------------------------------------+
|                                          1 |
+--------------------------------------------+
登录后复制
oCREATE TABLE … SELECT CHAR(…)生成了VARBINARY列而不是VARCHAR列。为了生成VARCHAR列,使用USING 或者 CONVERT()来将CHAR()转换成如同刚才描述的非二进制字符集。
o在以前的版本中,下面的声明将0x00410041('AA'作为ucs2字符串)插入到表格中,而对于MySQL 5.0.15,声明采取0x414值来插入一个ucs2字符。
oCREATE TABLE t (ucs2_column CHAR(2) CHARACTER SET ucs2);
oINSERT INTO t VALUES (CHAR(0x41,0x41));
•不兼容变化:从MySQL 5.0.12开始,自然连接和使用USING命令的连接包括外部连接变量,通过SQL:2003标准来进行处理的。这个改变包括对NATURAL和使用USING语句的连接去除多余的输出列,同时规范输出列表的次序。现在逗号操作符的优先级仍然低于JOIN。
•小数点数列以一种更为有效的格式进行存储。为了将一个表格转换为使用新的DECIMAL(浮点数)类型,你应该在它上面执行一个ALTER TABLE命令。ALTER TABLE命令也改变了表格的VARCHAR列以能够使用新的VARCHAR列类型。对于和原有的应用程序可能不匹配的信息,可查阅Chapter 22, Precision Math
•MySQL 5.0.3及更高的版本在计算点数值时使用数字精度集(64位浮点数)同时回绕精确的数字。可参见Chapter 22, Precision Math
•对于MySQL 5.0.3,结尾空间将不再被从VARCHAR和VARBINARY列中移除,在MySQL 5.0.3和后续版本,对于VARCHAR 和VARBINARY列的最大长度是65,535字符和65,535字节。
注意:如果你在MySQL 5.0.3或者后续版本中,你生成了含有新的VARCHAR或者r VARBINARY列的表,那这些表格将在低于MySQL 5.0.3版本中不起作用。在降级之前将这些表格清除掉,同时在降级之后对其进行重载。
•对于MySQL 5.0.3,BIT是一个单独的数据类型,而不是TINYINT(1)的同义。可参阅Section 11.1.1, “Overview of Numeric Types”
•MySQL 5.0.2添加了几个用于更加严格控制丢弃含有不合法或者丢失数值的记录。可参阅Section 5.3.2, “The Server SQL Mode”. 和Section 1.8.6.2, “Constraints on Invalid Data”。如果你想激活这项控制但同时继续使用存储的不正确日期,例如'2004-02-31',你应该采取--sql_mode=TRADITIONAL,ALLOW_INVALID_DATES启动服务器。
•对于MySQL 5.0.2,SCHEMA和SCHEMAS关键字被分别当作DATABASE和DATABASES同义字所接受。(然而“schemata”是语法正确的,同时有可能出现在MySQL 5.0的系统数据库和数据表格名字中,因此它能够被作为一个输出的关键字使用)
•在MySQL 5.0,用户变量是不区分大小写的。在MySQL 4.1中,SET @x = 0; SET @X = 1; SELECT @x;生成两个变量同时返回0.而在MySQL 5.0,该命令生成一个变量同时返回1.
•一个名字为innodb_table_locks启动选择项被添加了进来,该选项可能导致LOCK TABLE同时也需要InnoDB表格锁。该选项默认是被激活的。这有可能导致使用AUTOCOMMIT=1和 LOCK TABLES的应用程序死锁。如果你的应用程序在升级之后遇到死锁的情况,你可能需要添加innodb_table_locks=0到你的my.cnf文件。
C API 改变:
• 因为MySQL 5.0服务器有对小数类型的数据有一种新的执行功能,如果该服务器被一些仍由MySQL4.1版本的客户程序库链接而成的老版本客户程序所使用,就会出现一个问题,如果一个客户使用二进制客户机程序/服务器协议来执行准备好的能产生数值结果的声明,就会出现错误提示:错误发生的原因是4.1版本客户程序库并不支持在5.0版本中增加的新MYSQL_TYPE_NEWDECIMAL类型。而服务器这端,却没有屏蔽这种新的小数数据类型的途径。你可以通过和来自MySQL 5.0的客户端库的应用程序进行重链接来避免这个问题。
• MYSQL结构中的再连接标志可以通过mysql_real_connect()设置为0。而只有那些在进行mysql_real_connect()以后没有明确的把标志设为0或1的客户端程序才会发生变化。默认情况下自动重新连接是被认为是危险的(主要是由于表格锁,临时表格,用户变量以及会话变量在重新连接后有可能被丢失)。
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1662
14
CakePHP 教程
1419
52
Laravel 教程
1312
25
PHP教程
1262
29
C# 教程
1235
24
MySQL的角色:Web应用程序中的数据库 MySQL的角色:Web应用程序中的数据库 Apr 17, 2025 am 12:23 AM

MySQL在Web应用中的主要作用是存储和管理数据。1.MySQL高效处理用户信息、产品目录和交易记录等数据。2.通过SQL查询,开发者能从数据库提取信息生成动态内容。3.MySQL基于客户端-服务器模型工作,确保查询速度可接受。

laravel入门实例 laravel入门实例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用于轻松构建 Web 应用程序。它提供一系列强大的功能,包括:安装: 使用 Composer 全局安装 Laravel CLI,并在项目目录中创建应用程序。路由: 在 routes/web.php 中定义 URL 和处理函数之间的关系。视图: 在 resources/views 中创建视图以呈现应用程序的界面。数据库集成: 提供与 MySQL 等数据库的开箱即用集成,并使用迁移来创建和修改表。模型和控制器: 模型表示数据库实体,控制器处理 HTTP 请求。

docker怎么启动mysql docker怎么启动mysql Apr 15, 2025 pm 12:09 PM

在 Docker 中启动 MySQL 的过程包含以下步骤:拉取 MySQL 镜像创建并启动容器,设置根用户密码并映射端口验证连接创建数据库和用户授予对数据库的所有权限

MySQL和PhpMyAdmin:核心功能和功能 MySQL和PhpMyAdmin:核心功能和功能 Apr 22, 2025 am 12:12 AM

MySQL和phpMyAdmin是强大的数据库管理工具。1)MySQL用于创建数据库和表、执行DML和SQL查询。2)phpMyAdmin提供直观界面进行数据库管理、表结构管理、数据操作和用户权限管理。

解决数据库连接问题:使用minii/db库的实际案例 解决数据库连接问题:使用minii/db库的实际案例 Apr 18, 2025 am 07:09 AM

在开发一个小型应用时,我遇到了一个棘手的问题:需要快速集成一个轻量级的数据库操作库。尝试了多个库后,我发现它们要么功能过多,要么兼容性不佳。最终,我找到了minii/db,这是一个基于Yii2的简化版本,完美地解决了我的问题。

laravel框架安装方法 laravel框架安装方法 Apr 18, 2025 pm 12:54 PM

文章摘要:本文提供了详细分步说明,指导读者如何轻松安装 Laravel 框架。Laravel 是一个功能强大的 PHP 框架,它 упростил 和加快了 web 应用程序的开发过程。本教程涵盖了从系统要求到配置数据库和设置路由等各个方面的安装过程。通过遵循这些步骤,读者可以快速高效地为他们的 Laravel 项目打下坚实的基础。

MySQL与其他编程语言:一种比较 MySQL与其他编程语言:一种比较 Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。 MySQL以其高性能、可扩展性和跨平台支持着称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

初学者的MySQL:开始数据库管理 初学者的MySQL:开始数据库管理 Apr 18, 2025 am 12:10 AM

MySQL的基本操作包括创建数据库、表格,及使用SQL进行数据的CRUD操作。1.创建数据库:CREATEDATABASEmy_first_db;2.创建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入数据:INSERTINTObooks(title,author,published_year)VA

See all articles