‘In Place’ 帮助MySQL5.0直接升级至5.7
admin
2023-05-23 15:02:36
0

下文主要给大家带来‘In Place’ 帮助MySQL5.0直接升级至5.7,希望这些内容能够带给大家实际用处,这也是我编辑‘In Place’ 帮助MySQL5.0直接升级至5.7这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。

'In Place' 升级比'Dump'升级要快,因为你省去了导入数据的步骤。这样节省了时间,但升级前的备份就更加重要,因为你就是在原始目录上执行升级操作。你使用相同的数据文件,你就不能使用一些需要重建数据库才能使用的新功能,比如创建undo tablespaces(在5.6.3版本引入)或将已经存在的表改到独立表空间中(innodb_file_per_table 在5.6.6开始支持)。

我使用如下步骤进行升级:

  1. 启动5.0.96版本实例,导入sakila schema数据。为了简单,使用 --no-defaults。

    $ cd 
    $ ./scripts/mysql_install_db --no-defaults --datadir= --basedir=.
    $ ./bin/mysqld_safe --no-defaults --datadir= --basedir=. --port= --socket= &
    $ ./bin/mysql -uroot --socket= --execute="create database sakila;"
    $ ./bin/mysql -uroot --socket= --execute="source sakila-schema.sql" --database=sakila
    $ ./bin/mysql -uroot --socket= --execute="source sakila-data.sql" --database=sakila
  2. 关闭数据库服务。这是你备份数据库的好时间。然后,进入新版本MySQL的文件夹,启动数据库。使用相同的数据目录,所以你的所有数据都在

    $ cd 
    $ ./bin/mysqladmin -uroot --socket= shutdown
    $ cd 
    $ ./bin/mysqld_safe --no-defaults --datadir= --basedir=. 
    --port=< PORT> --socket=  --skip-grant-tables  &

    请注意,当第一次启动5.7版本数据库时,必须使用 --skip-grant-tables。

  3. 运行 mysql_upgrade。这样会升级所有的系统表和检查用户库。

    $ ./bin/mysql_upgrade -uroot --socket=
  4. 导入帮助表(可选)

    $ ./bin/mysql -uroot --socket= --execute="source ./share/fill_help_tables.sql" mysql
  5. 重启MySQL服务

    $ ./bin/mysqladmin -uroot --socket= shutdown
    $ ./bin/mysqld_safe --no-defaults --datadir= --basedir=. 
    --port= --socket= &
  6. 运行mysqlcheck检查数据库状态

    $ ./bin/mysqlcheck -uroot --socket= --all-databases

如果从5.0.96升级,这种升级方法可能需要重建一些表或触发器。在本文使用的sakila 条件下,我收到了下面的警告信息:

Warning  : Triggers for table `sakila`.`customer` have no creation context
Warning  : Triggers for table `sakila`.`film` have no creation context
Warning  : Triggers for table `sakila`.`payment` have no creation context
Warning  : Triggers for table `sakila`.`rental` have no creation context

由于触发器存储的元数据的更改,需要重载。我使用下面的步骤重建触发器:

  1. 使用mysqldump导出触发器

    $ ./bin/mysqldump --socket= -uroot --triggers --no-create-db --no-data --no-create-info --all-databases > addtriggers.sql
  2. 生成一个sql去删掉存在的触发器。排除sys库,因为上面的mysqldump不会导出sys库中的触发器。

    mysql> SELECT CONCAT('DROP TRIGGER ', TRIGGER_SCHEMA, '.', 
                     TRIGGER_NAME, ';')
              FROM INFORMATION_SCHEMA.TRIGGERS
              WHERE trigger_schema not in ('sys') 
              INTO OUTFILE 'droptriggers.sql';
  3. 删掉存在的触发器

    $ ./bin/mysql --socket= -uroot --execute="source droptriggers.sql"
  4. 重载触发器

    $ ./bin/mysql --socket= -uroot --execute="source addtriggers.sql"
  5. 运行mysqlcheck

    $ ./bin/mysqlcheck -uroot --socket= --all-databases

使用上面的步骤从5.0.96、5.1.73、5.5.46和5.6.27 升级到5.7.9,均是成功的。使用mysqlcheck,统计所有库的表、列和程序的数量,运行基础的select/insert/update/delete 语句并执行、调用用户函数和存储过程来进行验证。

(注:在这篇文章写的时候,还不支持5.5到5.7版本的复制,在5.7.13版本时,修复了该bug)

对于以上关于‘In Place’ 帮助MySQL5.0直接升级至5.7,大家是不是觉得非常有帮助。如果需要了解更多内容,请继续关注我们的行业资讯,相信你会喜欢上这些内容的。

相关内容

热门资讯

赋能全域数据互通,“郑数登”入... 【大河财立方 记者 李雯雯】5月19日,大河财立方记者从郑州数据交易中心获悉,由河南省发展改革委、中...
河南文旅,“留量时代” 【大河财立方 记者 朱娟】初夏微风,轻拂过中原,吹动文旅潮涌不息。从龙门石窟的千年石刻到洛邑古城的汉...
从机甲量产到AI适配 人形机器... 载人变形机甲量产落地,人形机器人接入AI智能体,机器人动作大模型面世……近期,我国人形机器人领域迎来...
鑫宏业获得实用新型专利授权:“... 证券之星消息,根据天眼查APP数据显示鑫宏业(301310)新获得一项实用新型专利授权,专利名为“抗...
客运航司上市有望破冰!长龙航空... 【大河财立方消息】 时隔8年,A股或再迎来一家客运航空公司。近日,证监会官网显示,浙江长龙航空股份有...
湖南省拟发行34.12亿元地方... 【大河财立方消息】 5月19日,湖南省财政厅发布通知,决定发行2026年湖南省政府专项债券(十至十一...
中央生态环保督察公布辽宁、吉林... 第三轮第六批中央生态环境保护督察今天(5月19日)集中公布辽宁、吉林、黑龙江和广西四省区典型案例。辽...
2026年成都市科技活动周即将... 记者从成都市科技局获悉,5月23日晚,2026年四川省科技活动周暨蓉城科学之夜启动仪式将在成都天府艺...
河南制造,“小满时刻” 【大河财立方 记者 王磊彬 文图】立夏之后,小满将至。中原沃野之上,千万亩小麦正进入籽粒灌浆、日渐充...
败诉后,马斯克表示“不服” 就美国企业家埃隆·马斯克针对开放人工智能研究中心(OpenAI)的诉讼,加利福尼亚州奥克兰市一家联邦...