很长时间以来,我们在做MySQL数据转移的时候都是按照[[MySQL设置]]这篇文章里面的说法:
导出备份数据
mysqldump -h 服务器IP地址 -u 用户名 -p 密码 --opt 数据库名>备份数据库名
例如:
mysqldump -h localhost -u root -p --opt food>food2007-08-24-04.sql
这条命令将服务器localhost上的food这个数据库备份到本地计算机当前目录的food2007-08-24-04.sql这个文件中,这样,当数据库不小心损坏或数据丢失时,就可以由food2007-08-24-04.sql这个备份文件恢复了
导入恢复数据
mysql -h 服务器IP地址 -u 用户名 -p 密码 -f -D 数据库名 <备份文件名
例如:
mysql -h localhost -u root -p -f -D food <food2007-08-24-04.sql
这条命令会将food2007-08-24-04.sql这个文件中的数据重新恢复到服务器food数据库中。
注意在恢复前这个库应该删除,并重建,而且.sql文件中的数据库名要与创建的数据库名相同才能恢复:
mysqladmin -uroot -p123456 drop database_name mysqladmin -uroot -p123456 create database_name
要指定字符集,可以登录phpmyadmin后执行:
CREATE DATABASE `new_database_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
上面这种做法做了10年都没有问题,直到最近一次转移emojiall.com的数据后,发现转移后的内容丢失了部分Emoji字符,例如这样的:
- ? 地图
- ? 地理
- ?️ 建筑
- ⛪ 宗教场所
- ⛲ 其他场所
- ⛽ 陆路交通
- ? 水路交通
- ?️ 空中运输
- ?️ 酒店
- ⌚ 时间
- ☂️ 天空&天气
仔细检查发现是数据库备份、恢复后与以前的数据内容不一样的,虽然数据库表结构都是一样的,也都支持uft8mb4。在网上搜了一下,应该把备份语句改为下面这样:
mysqldump --default-character-set=utf8mb4 -utest -ptest test_dev user > user.sql
这样的备份数据恢复后就不会产生emoji丢失的情况,上面那个列表显示如下:
- 🌍 地图
- 🌋 地理
- 🏗️ 建筑
- ⛪ 宗教场所
- ⛲ 其他场所
- ⛽ 陆路交通
- 🚢 水路交通
- 🛎️ 空中运输
- 🛎️ 酒店
- ⌚ 时间
- ☂️ 天空&天气
Emoji的用途这几年越来越普及了,MySQL必须用utf8mb4来支持,我们后来建的Drupal 7、Drupal 8网站都是支持的,例如:
- Emoji All 表情字典 📓 (Drupal 7)
- Emoji All 表情符号的博客 ✍️ (Drupal 8)
还有几个有用工具:
评论