原数据库截图
备份导出
mysqldump -u用户 -p密码 数据库名 > (目录)导出文件名
不过不建议密码输入在命令行,并且centos也会给出警告
mysqldump -uroot -p vip-manager > vip-manager-bak.sql
备份导入
mysql -u root -p
mysql> create database jiaxintestbak01;
mysql> use jiaxintestbak01;
mysql> source /mnt/data/mysql_data/jiaxintest.sql;
常见问题之表情包保存
Exception: MySQL Error: Incorrect string value: ‘\xF0\x9F\x90\xB1’ for column ……
Emoji表情符号为4个字节的字符,而 utf8 字符集只支持1-3个字节的字符,所以无法写入数据库。(mysql版本需要高于5.5.3)
- 解决方式:更换字符集utf8–>utf8mb4
mb4的意思是most bytes 4,专门为兼容四个字节的。utf8mb4是向下兼容utf8的,所以即便修改了字段的字符集也不会影响线上数据。
- 修改可以分为全局修改和当前会话修改。
- 全局修改需要修改服务器端的配置
- 会话修改只需要在链接时进行修改
字符集介绍
character_set_client:客户端来源数据使用的字符集
character_set_connection:连接层字符集
character_set_database:当前选中数据库的默认字符集
character_set_server:默认的内部操作字符集
character_set_results:查询结果字符集
character_set_system:系统元数据(字段名等)字符集
服务器端配置:修改my.cnf数据库配置
vim /etc/my.cnf 添加如下配置
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
有的人遇到了备份后表情包无法正常展示(ps 我没有遇到。。。)
所以建议排查
1、设置库编码
` mysql> show variables like “%char%”;`
2、重新备份导入
为此我特地去重现了一遍
总结以下四种情况
本地重现
Mac默认无my.cnf 配置文件 针对mac端,并且没有my-default.cnf的用户
- 我们要在/etc下新建my.cnf
$ cd /etc
$ sudo vim my.cnf (附上我的配置文件,见文章最下面)- 重新修改字符编码,增加以下配置后,重启mysql
[client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci
重新导入文件
依旧乱码
写在最后的话:在备份时设置系统的编码,而非备份后再修改编码格式,避免对历史数据造成影响