MySQL数据库之Mysql字符集相关问题总结
小标 2018-11-13 来源 : 阅读 1250 评论 0

摘要:本文主要向大家介绍了MySQL数据库之Mysql字符集相关问题总结 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。

本文主要向大家介绍了MySQL数据库之Mysql字符集相关问题总结 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。


字符集相关问题


1、如果出现数据库数据显示乱码请从三个方面解析

- 客户端字符集

- 服务端字符集

- 连接工具字符集


其中客户端字符集临时生效使用set name utf8,如果想要永久生效,请在my.cnf配置文件配置,并重启mysql


2、常用的集中字符集

- GBK:不是国际字符,对中文字符支持比较好,一个字符占两个字节

- utf-8:在中英文混合的情况下适合使用,每个中文字符都占三个字节

- latin1:mysql的默认字符集,每个字符占一个字节

- utf8mb4:UTF-8 unicode,每个字符占四个字节


3、如何选择mysql的字符集设置,这里分几种情况记录一下

- 如果处理各种各样的文字,发布到不同语言国家地区,应选择Unicode字符集,对mysql来说就是UTF-8,如果要使用英文,仅使用少量的UTF-8更好

- 如只需要支持中文,性能也要求比较高,可选GBK,如果需要大量运算,比较排序等,定长字符集,更快,性能更高。

- 处理移动互联网业务,可以需要使用utf8mb4字符集


4、如何修改已有的数据字符集

- 不能直接使用alter databases character set *,这个命令没有更新已有记录的字符集,而只是对新创建的表或者记录生效。

- 已有记录的字符调整,必须先将数据导出,经过修改字符集后重新导入后才可完成


5、修改字符集步骤

1)、建库及建表的语句导出,sed批量修改改为utf8

2)、导出所有mysql数据

3)、修改mysql服务端和客户端编码为utf8

4)、删除原有的库表及数据

5)、导入新的建库及建表的语句

6)、导入mysql的所有数据


6、备份语句


mysqldump -uroot -p --quick --no-create-info --extended-insert 、--default-character-set=latin dbname >alldata.sql

   



参数说明:

--quick:用于转储大的表,强制mysqldump从服务器一次一行的检索数据而不是检索所有行,并输出钱cache到内存中

--no-create-info:不创建create table语句

--extended-insert:使用包括几个VALUES列表的多行INSERT语法,这样文件更小,IO也小,导入数据时会非常快。

--default-character-set=latin1 #按照原有字符集导出数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码。


mysql备份


1、备份的时候加入-B参数,增加创建数据库和连接数据库的命令,如


mysqldump -uroot -proot --default-character-set=latin1 -B test >/opt/mysql_test.sql

   



2、优化备份文件减少输出注释(测试调试用,生产不用)

利用mysqldump的–compact参数优化下备份

参数说明:

该选项使得输出内容更简洁,不包括默认选项中各种注释,有如下几个参数的功能

--skip-add-drop-table,--no-set-name,--skip-disable-keys,--skip-add-locks


3、指定压缩命令压缩备份的mysql数据


mysqldump -uroot -proot --default-character-set=latin1 -B test|gzip >/opt/mysql_test.sql.gz

   



压缩效果将近3倍


4、如何同时备份多个库


mysqldump -uroot -proot -B test test1|gzip >/opt/mysql_test.sql.gz

   



-B参数表示连接多个库,并且增加use db,create db的信息


5、做数据的分库分表备份


mysql -uroot -proot -e "show databases;"|grep -Evi "database|infor|perfor"|sed -r 's#^[a-z].*$#mysqldump -uroot -proot --events -B \1|gzip >/opt/bak/\1.sql.gz#g'|bash

   



6、做分表备份


mysqldump -uuser -ppassword 数据库名 表1 表2 表3 >/opt/test_table.sql

   



7、mysqldump的关键参数备份

1)、-B指定多个库,增加建库语句和use语句

2)、--compact去掉注释,适合调试输出,生产不用

3)、-A所有库

4)、-F刷新binlog日志

5)、-x,--lock-all-tables

6)、-l,--lock-tables 锁表只读

7)、-d只备份表结构

8)、-t只备份数据

9)、--single-transaction 适合innodb事务数据备份

InnoDB表再备份时,通常启用选项–single-transaction来保证备份的一致性,实际上它的工作原理是设定本次会话的隔离级别为:REPEATABLE READ,以确保本次会话(dump)时,不会看到其他会话已经提交了的数据


8、不同引擎备份方式不一样

myisam备份命令:


mysqldump -uroot -proot -A -B --master-data=2 -x|gzip >/opt/all.sql.gz

mysqldump -uroot -proot -F -A -B --lock-all-tables|gzip >all.sql

   



Innodb备份命令:推荐使用


mysqldump -uroot -proot -A -B --master-data=2 --events --single-transaction|gzip >/opt/all.sql.gz

mysqldump -uroot -proot -F --single-transaction -A -B|gzip >all.sql

   



9、二进制恢复mysql的binlog日志

使用命令:mysqlbinlog日志


10、企业场景全量和增量的频率是怎么做的呢?

1)中小公司,全量一般是每天一次,业务流量低谷执行全备,备份时会锁表

2)单台数据库,如何增量,用rsync(配合定时任务频率大点,或者inotify,主从复制)把所有binlog备份到远程服务器

如:rsync -avz /data/3306/mysql-bin.000* rsync_backup@10.0.0.18::backup --password-file=/etc/rsync.password

3)大公司周备,每周六00点一次全量,下周日-下周六00点前都是增量备份

优点:节省备份时间,减小备份压力,缺点:增量的binlog文件副本太多,还原会很麻烦

4)一主多从,会有一个从库做备份,延时同步


11、mysql的mysqldump备份什么时候派上用场

1)迁移或者升级数据库时

2)增加从库时候

3)因为硬件或特殊异常情况,主库或从库宕机,从库可以互相切换,无需备份

4)人为的DDL,DML语句,住从库没办法,所有库都会执行,此时需要备份


数据库恢复


1、指定开始位置和结束位置


mysqlbinlog mysqlbin.000021 --start-position=510 --stop-position=1312 -r pos.sql

   



输出 初始位置510,结束位置1312的所有binlog日志到pos.sql

注意:结尾的日致点比较特殊,不会被包含,即输出1312pos以前的binlog,位置点信息一般要实际存在,不能乱指定


2、指定开始位置到文件结束


mysqlbinlog mysqlbin.000021 --start-position=510 -r pos510-end.sql

   



输出开始位置510到文件结尾的所有binlog到pos510-end.sql


3、增量恢复的流程

1)停止一个从库,然后再主库刷新binlog,把mysql-bin.000014恢复成bin.sql(去掉drop语句)

2)把全备bak_2014-11-06.sql及10点前的增量bin.sql恢复到从库

3)切换到从库提供服务


主从复制


1、主从不一致,如何切换

1)、从主库拉取不一致的部分,导入(百度这样干的)

2)、双写

3)、通过应用程序写一个1分钟暂时日志

4)、把异步同步换成实时同步(谷歌开发出一个半同步插件,)

5)、drbd a,d,c三个等级


2、mysql主从同步配置步骤

1)、配置my.cnf文件,主库配置log-bin和server-id参数,从库配置server-id,不能和其他从库一样,一般不开启从库log-bin功能,注意:配置参数后要重启生效

2)、登陆主库增加用于从库连接主库同步的账户并授权replication slave同步的权限

3)、登陆主库,整库锁表flush table with read lock(窗口关闭后失效,超时参数到了也失效),然后show master status查看binlog的位置状态

4)、linux命令备份到处原有的数据库数据,并拷贝到从库所在的服务器目录,如果数据量大,并且允许停机,可以停机打包,而不用mysqldump

5)、解锁主库,unlock tables;

6)、show slave status\G,检查同步状态,并在主库进行更新测试

补充:

5.1:flush tables with read lock

5.5:flush table with read lock


双写如何解决自增不一致的问题

1、设置相同步长,设置不同id

如:

master1:

auto_increment_increment =2:自增ID的间隔,如1 3 5 间隔为2

auto_increment_offset = 1 :ID的初始位置

master2:

auto_increment_increment = 2:自增的ID间隔,如2 4 6

auto_increment_offset = 2:ID的初始位置


3、快速主从配置

备份的时候指定参数–master-data=1,在maste.info即使不指定位置点和文件都没事,直接导入从库即可


数据库优化


1、配置优化

innodb_flush_log_at_trx_commit=0,每个事务提交的时候,每隔一秒写入log file,同时刷到磁盘

innodb_flush_log_at_trx_commit=1,每当提交事务,同时刷入log file和磁盘

innodb_flush_log_at_trx_commit=2,每当事务提交,马上写入log file,每隔1秒写入磁盘

当设置为0时性能最高但不安全,1最安全,但速度相对比较慢,当设置为2时,比1块,比0安全


1、硬件优化

cpu 64位CPU,一台机器8-16颗CPU,2-4颗

mem 96G-128G,32-64跑两个实例

disk 数量越多越好,性能:ssd>sas>sata,raid 4块盘:raid0>raid10>raid5>raid1

网卡,多块网卡bond,以及buffer,tcp优化


2、软件优化

操作系统:x86_64位

软件:mysql编译优化


3、my.cnf参数优化,大部分架构以及SQL语句优化


4、SQL语句的优化

a.索引优化

慢查询日志分析工具:mysqldumpslow,myprofi,mysql-explain-slow-log,mysqllogfilter

b、大的sql语句拆分成多个小的SQL语句

c、数据库是存储数据的地方,但是不是计算数据的地方

d、搜索功能,like ‘%老男孩%’,一般不要用mysql数据库

e、每天晚上0点分析慢查询,发到核心开发,DBA分析,及高级运维,CTO邮箱里面

DBA分析给出优化建议–核心开发确认更改–DBA线上操作处理


5、架构上的优化

1、业务拆分:like’%test%‘,一般不用mysql数据库

2、业务拆分,某些业务使用nosql持久化存储

3、数据库前端必须要加cache

4、动态的数据静态化,整个文件静态化,页面片段静态化

5、数据库集群与读写分离,一主多从,通过程序或者dbproxy进行集群读写分离

6、单表超过2000万,拆库拆表,人工拆表拆库


6、流程,制度,安全优化

任何一次人为数据库记录的更新,都要走一个流程

a、人的流程:开发–核心开发–运维DBA

b、测试流程:内网测试–idc测试–线上执行

c、客户端管理,phpmyadmin


读写分离


通过程序

生产基本不用代理软件:mysql-proxy,amoeba

生产:分布式dbproxy,读写分离,hash负载均衡,健康检查


          

本文由职坐标整理并发布,希望对同学们学习MySQL有所帮助,更多内容请关注职坐标数据库MySQL数据库频道!



本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程