文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL 8.0数据字典有什么变化

2024-11-30 18:09

关注

从MySQL 8.0开始,采用独立表空间模式的每个InnoDB表只有一个 .ibd 表空间文件,而不再有 .frm 文件了。为了实现DDL的原子性,InnoDB直接把元数据存储在表空间文件中,需要的话,可是使用 ibd2sdi 工具从中读取,例如:

$ ibd2sdi test/t1.sdi
["ibd2sdi"
,
{
"type": 1,
"id": 1268,
"object":
{
"mysqld_version_id": 80031,
"dd_version": 80023,
"sdi_version": 80019,
"dd_object_type": "Table",
...
{
"type": 2,
"id": 29,
"object":
{
"mysqld_version_id": 80031,
"dd_version": 80023,
"sdi_version": 80019,
"dd_object_type": "Tablespace",
"dd_object": {
"name": "test/t1",
"comment": "",
"options": "autoextend_size=0;encryption=N;",
"se_private_data": "flags=16417;id=24;server_version=80031;space_version=1;state=normal;",
"engine": "InnoDB",
"engine_attribute": "",
"files": [
{
"ordinal_position": 1,
"filename": "./test/t1.ibd",
"se_private_data": "id=24;"
}
]
}
}
}
]

如果是MyISAM引擎表,也不再有 .frm文件,而是采用 .sdi 文件来记录元数据信息。

在 .sdi 文件中,采用JSON格式存储元数据信息。

对于MyISAM表,不能再像以前那样,直接把 .frm\.MYD\.MYI 文件拷贝到目标数据库后就能直接用。方法改成了类似下面这样的:

# 首先拷贝数据及索引文件到目标数据库
$ cp -p ./db1/t1.MYD ./db1/t1.MYI ./db2

# 拷贝 .sdi 文件到 secure_file_priv 指定的路径下
$ cp -p ./db1/t1_1274.sdi $secure_file_priv/

# 修改 .sdi 文件中的 schema 值,将 db1 改成 db2
# MySQL文档中没提到这点,但实测过程中发现需要加这步操作
$ vim $secure_file_priv/t1_1274.sdi
...
"schema_ref":"db1" #此处修改成 "schema_ref":"db2"
...

# 执行导入操作
mysql> IMPORT TABLE FROM '$secure_file_priv/t1_1274.sdi';

上文中的 $secure_file_priv 需要自行替换成实际路径。

另外,.sdi 文件名前面的数字,是该表的隐藏ID,每次新建一个表,这个值都会顺序增加,类似 InnoDB 表的 TABLE_ID 值(这里说的是类似,二者不等价)。

2. 怎么查看每个/某个session里设置的variables

查看 performance_schema.variables_by_thread 即可

select * from variables_by_thread where VARIABLE_NAME = 'sort_buffer_size';
+-----------+------------------+----------------+
| THREAD_ID | VARIABLE_NAME | VARIABLE_VALUE |
+-----------+------------------+----------------+
| 29310 | sort_buffer_size | 4194304 |
| 29375 | sort_buffer_size | 4194304 |
| 29378 | sort_buffer_size | 32768 | -- 在这个session里修改成其他非默认设置值
| 29209 | sort_buffer_size | 4194304 |
+-----------+------------------+----------------+

再根据 THREAD_ID​ 列和 performance_schema.threads 关联查询,即可知道每个/某个session里的variables是否有自定义设置了。

3. mysqlpump备份并不好用

用mysqlpump备份时,默认是不会备份用户授权信息的,需要类似这样 mysqlpump --exclude-databases=% --users 单独指定选项才能额外备份用户授权信息。

来源:GreatSQL社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯