目录

1、mysql字符集

1.1、字符集介绍

1.2、MySQL数据库常见字符集介绍

1.3、MySQL怎样选择合适的字符集

1.4、查看MySQL支持的字符集

1.5、查看MySQ当前的字符集设置情况

1.6、实例,迁移数据

1.6.1、准备实验环境

1.6.2、导出数据表结构

1.6.3、编辑booktable.sql将latin1修改为utf8

1.6.4、确保数据库不再更新,导出所有数据

1.6.5、打开bookdata.sql将set name latin1修改成set name utf8

1.6.6、新建book2库

1.6.7、建立表,导入我们之前导出的表结构

1.6.8、导入数据

1.6.9、查看结果

1.6.10、查看表内容

2、mysql备份恢复

2.1、MySQL备份的类型

2.1.1、按照备份时对数据库的影响范围分类:

2.1.2、按照备份后文件内容分类:

2.1.3、按照备份数据库的内容来分,又可以分为:

2.1.4、建议的备份策略

2.2、逻辑备份工具mysqldump

2.2.1、导出数据:

2.2.2、导入数据:


1、mysql字符集

1.1、字符集介绍

字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。 字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、GIG5字符集、GB18030字符集、GB2312字符集、GIG5字符集、GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,就需要进行字符编码,以便计算机能够存储和识别各种文字。

字符集补充说明:

ASCII字符集:American Standard Code for Information Interchange,美国信息互换标准编码。7位(bits)表示一个字符,共128字符,字符值从0到127.包括空值字符:回车键、退格、换行键等。可显示字符:英文大小写字符、阿拉伯数字和西文符号。

ASCII扩展字符集:它是从ASCII字符集扩充出来的,扩充后的符号增加了表格符号、计算符号、希腊字母和特殊的拉丁符号。ASCII扩展字符使用8位表示一个字符,共256字符。

GB2312由原中国国家标准局发布,收录简化汉字及一般符号、序号、数字、拉丁字母、希腊字母、俄文字母、汉语拼音符号、汉语注音字母,共7445个图形字符。其中包括6763个汉字,用双字节表示。

Big5又称大五码或五大码,1984年由台湾财团法人信息工业策进会和五家软件公司宏基(Acer)、神通(MiTAC)、佳佳、零壹、大众创立,故称五大码。字符集共收录13053个中文字,该字符集在中国台湾使用。Big5码使用了双字节存储方法。

GB18030字符集标准解决汉字、日文、朝鲜语和中国少数民族汉字组成的大字符集计算机编码问题。是我国政府于2000年3月17日发布的新的汉字编码国家标准,收录27484个汉字,覆盖中文、日文、朝鲜语和中国少数民族汉字。满足中国大陆、香港、台湾、日本和韩国等东亚地区信息交换多文种、大字量、多用途、统一编码格式的要求。GB18030采用单字节、双字节和四字节三种方式对字符编码。单字节部分对应ASCII码的相应部分,双字节部分收录内容主要包括GB13000.1全部CJK汉字20902个、有关标点符号、表意文字描述符13个、增充的汉字和部首80个、双字节编码的欧元符号等。四字节部分收录了上述双字节之外的,包括CJK统一汉字在内的GB13000.1中的全部字符。

Unicode字符集编码是Universal Multiple-Octet Coded Character Set通用多八位编码字符集的简称,是一个由Unicode学术学会(Unicode Consortium)的机构制订的字符编码系统,支持现今世界各种语言的书面文本的交换、处理及显示。

UTF-8是Unicode的其中一个使用方式。UTF是Unicode Tranformation Format,即把Unicode转做某种格式的意思。UTF-8使用可变长度字节来存储Unicode字符,又称万国码。例如ASCII字母继续使用1字节存储,重音文字、希腊字母或西里尔字母等使用2字节来存储,而常用的汉字就要使用3字节。辅助平面字符则使用4字节。

Mysql数据库字符集包括字符集(CHARACTER)和校对规则(COLIATION)两个概念,其中字符集用来定义MySQL数据字符串的存储方式,而校对规则定义字符串比较的方式。

1.2、MySQL数据库常见字符集介绍

选择字符集建议使用国际标准的utf8

1.3、MySQL怎样选择合适的字符集

1、如果处理各种各样的文字、发布到不同语言国家地区,应选Unicode字符集,对MySQL来说就是utf8(每个汉字3个字节)。

2、如果只是需要支持中文,并且数据量很大,性能要求也高,可选GBK(定长,每个汉字占双字节,英文也占双字节),如果是大量运算,比较排序等,定长字符集更快,性能也高

3、处理移动互联网业务,可能需要utf8mb4字符集。

1.4、查看MySQL支持的字符集

MySQL可以支持多种字符集,同一台服务器,库或表的不同字段都可以指定不同的字符集

查看所有的字符集

mysql -uroot -p123456 -e "show create set \G"    #查看所有的字符集

查看常用的字符集:

mysql -uroot -p123456 -e "show character set \G"; | egrep "gbk|utf8|latin1" | awk '{print $0}'

查看字符集的校对规则:

mysql -uroot -p123456 -e "show collation;"

1.5、查看MySQ当前的字符集设置情况

mysql -uroot -p123456

show variables like 'character_set%';

名次解释:

character_set_client:客户端请求数据的字符集

character_set_connection:客户机/服务器连接的字符集

character_set_database:默认数据库的字符集

character_set_filesystem:把os上文件名转化成字符集,即把character_set_client转换成character_set_filesystem,默认binary是不做任何转换的

character_set_results:结果集,即返回给客户端的字符集

character_set_server:数据库服务器的默认字符集

character_set_system:系统字符集,这个值总是utf8,不需要设置。这个字符集用于数据库对象(如表和列)的名字,也用于存储在目录表中的函数的名字。

查看当前数据库的校对规则:

mysql -uroot -p123456 -e "show varibles like 'collation%';"

默认情况下字符集选择规则:
(1)编译MySQL时,指定了一个默认的字符集(-DDEFAULT_CHARSET=utf8),如果未指定默认是latin1;

(2)安装MySQL后,可以在配置文件(my.cnf)中指定服务器的默认字符集(character_set_server=utf8),如果没指定,这个值继承自编译时指定的;

配置文件中指定服务器的默认字符集会影响参数:character_set_server和character_set_database

(3)启动mysqld时,可以在命令行参数中指定一个默认的字符集,如果没指定,这个值继承自配置文件中的配置,此时character_set_server被设定为这个默认的字符集

例如:./mysqld --character_set_server=utf8 &

影响参数:character_set_server和character_set_database

(4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server

例如:create database 数据库名 default character set=utf8;

(5)当选定了一个数据库时,character_set_database被设定为这个数据库默认的字符集;

例如:set character_set_database=utf8;

(6)在这个数据库里创建一个表时,表默认的字符集被设定为character_set_database,也就是这个数据库默认的字符集;

(7)当在表内设置列时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;

1.6、实例,迁移数据

背景:公司业务数据book,由于之前建表没注意字符集的问题,导致之前写入的数据出现乱码。现在要将之前的数据和现在数据的字符集保持一致,不出现乱码情况,将字符集latin1已有记录的数据转成utf8,并且已经存在的记录不乱码。

步骤:

1:建库及建表的语句导出,修改为utf8

2:导出之前所有的数据

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

4:删除原有的库表及数据

5:导入新的建库及建表语句

6:导入之前的数据

1.6.1、准备实验环境

1、确保数据库服务器的默认字符集是utf8

修改/etc/my.cnf配置文件中character-set-server=utf8,重启mysql

vim /etc/my.cnf

systemctl restart mysqld

由于我们books表的字符集是utf8,删除book数据库,重新创建book数据库,导入字符集为latin1的sql文件book.sql

上传book<book_latin1.sql文件

mysql -uroot -p123456 -e "drop databse book;"

mysql -uroot -p123456 -e "create database book;"

mysql -uroot -p123456 book<book_latin1.sql

查看books表的字符集

mysql -uroot -p123456 -e "show create table book.books;"

查看表内容:

除了英文和时间,中文都是乱码

1.6.2、导出数据表结构

mysqldump -uroot -p123456 --default-character-set=latin1 -d book > booktable.sql

1.6.3、编辑booktable.sql将latin1修改为utf8

vim booktable.sql

1.6.4、确保数据库不再更新,导出所有数据

mysqldump -uroot -p123456 --quick --no-create-info --extended-insert --default-character-set=latin1 book>bookdata.sql

参数说明:

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

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

--extended-inseret:使用包括几个values列表的多行insert语法,这样文件更小,io也小,倒数数据时会非常快

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

1.6.5、打开bookdata.sql将set name latin1修改成set name utf8

vim bookdata.sql

1.6.6、新建book2库

mysql -e "create database book2 default charset utf8;" -uroot -p123456

1.6.7、建立表,导入我们之前导出的表结构

mysql -uroot -p123456 book2 < booktable.sql

1.6.8、导入数据

mysql -uroot -p123456 < bookdata.sql

1.6.9、查看结果

mysql -uroot -p123456 -e "show create table book2.books;"

1.6.10、查看表内容

mysql -uroot -p123456 -e "select * from boo2.books"

2、mysql备份恢复

一、备份的目的:
做灾难恢复:对损坏的数据进行恢复和还原

需求改变:因需求改变需要把数据还原到改变以前

测试:测试新功能是否可用

二、备份需要考虑的问题:

可以容忍丢失多长时间的数据;

恢复数据要在多长时间内完成;

恢复的时候是否需要持续提供服务;

恢复的对象,是整个库,多个表,还是单个库,单个表。

2.1、MySQL备份的类型

2.1.1、按照备份时对数据库的影响范围分类:

Hot backup(热备) Cold Backup(冷备) Warm Backup(温备)

1、Hot backup:指在数据库运行中直接备份,对正在运行的数据库没有任何影响。(Online Backup),官方手册称为在线备份。(备份的同时,业务不受影响)

2、Cold Backup:指在数据库停止的情况下进行备份(Offline Backup),官方手册称为离线备份。(需要关mysql服务,读写请求均不允许状态下进行)

3、Ware Backup:备份同样在数据库运行时进行,但仅支持读请求,不允许写请求;例如,加一个读锁以保证备份数据的一致性。(服务在线,但仅支持读请求,不允许写请求)

2.1.2、按照备份后文件内容分类:

1、逻辑备份

指备份后的文件内容是可读的,通常为文本文件,内容一般是sql语句,或者是表内的实际数据,如mysqldump和select * into outfile的方法,一般适用于数据库的升级和迁移,恢复时间较长

2、物理文件备份

对数据库物理文件的备份(如数据文件、日志文件等)的备份,数据库即可以处于运行状态(mysqlhotcopy、ibbackup、xtrabackup这类工具),也可以处于停止状态(cp、tar等),恢复时间较短。

2.1.3、按照备份数据库的内容来分,又可以分为:

1、完全备份:每次对数据进行完整的备份。可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但它需要花费更多的时间和存储空间,所以,做一次完全备份的周期要长些。完全是其他类型的基础。

2、差异备份:在上一次完全备份基础上,对更新的数据进行备份。因为只备份数据库部分的内容。它比完全备份小,因为只包含自上次完全备份以来所改变的数据。它的优点是存储和恢复速度快。

3、增量备份:在上次备份的基础上,对更新的数据进行备份。

4、日志备份:二进制日志备份

2.1.4、建议的备份策略

完全+差异+二进制日志

完全+增量+二进制日志

2.2、逻辑备份工具mysqldump

mysqldump是MySQL数据库自带的一款命令行工具,mysqldump属于单线程,功能是非常强大的,不仅常被用于执行数据备份任务,甚至还可以用于数据迁移。

mysqldump是mysql自带的逻辑备份工具,它的备份原理是,通过协议连接到mysql数据库,将数据转换成标准sql语句(一堆create,drop,insert等语句);

但我们需要还原时,只要执行这些语句即可将对应的数据还原。

优点:备份粒度相当灵活,既可以针对某个MySQL服务,也可以只备份某个或者某几个DB,或者还可以指定只备份某个或者某几个表对象,甚至可以实现只备份表中某些符合条件的记录(-w,--where:只导出符合条件的记录)。

缺点:

1、当数据是浮点数时,会出现精度丢失。

2、mysqldump的备份过程属于逻辑备份,备份数据、恢复速度与物理备份工具相比较慢,而且mysqldump备份的过程是串行化的,不会并行的进行备份,当数据量较大时,一般不会使用mysqldump进行备份,因为效率较低。

···············································分割线······················································

mysqldump对innodb存储引擎支持热备,innodb支持事务,我们可以基于事务通过mysqldump对数据库进行热备(--single-transaction选项)

mysqldump对mysiam引擎只支持温备,通过mysqldump对使用mysiam存储引擎的表进行备份时,最多只能实现温备,因为备份时会对备份的表请求一个读锁,当备份完成时,锁会被释放。

2.2.1、导出数据:

语法:mysqldump [options] [db_name [tb_name]...] >导出的文件名.sql

我们说多mysqldump是一个客户端命令,所以,就像使用mysql命令连接数据库一样,我们需要指定连接的用户名,需要连接的数据库服务ip,以及使用-p选项提示我们输入密码,这些用法都与我们的mysql命令一致。

常用参数:

-?,--help:显示帮助信息,英文的;

-u,--user:指定连接的用户名;

-p,--password:指定用户的密码,可以交互输入密码;

-S,--socket:指定socket文件连接,本地登陆才会使用。

-h,--host:指定连接的服务器名称或者ip。

-p,--port:连接数据库监听的端口。

--default-character-set:设置默认字符集,默认是utf8。

-A,--all-databases:导出所有数据库,不过默认情况下是不会导出information_schema库。

-B,--databases:导出指定的某个或者某几个数据库,参数后面所有名字都被看作数据库名,用空格隔开,包含create database创建库的语句。

--tables:导出指定表对象,参数格式为“库名 表名”,默认该参数将覆盖-B参数。

-w,--where:只导出符合条件的记录。

-l,--lock-tables:默认参数,锁定读取的表对象,想导出一致性备份的话最好使用该参数,但会导致无法对表执行写入操作。

--single-transaction:该选项导出数据之前提交一个BEGIN SQL语句,BEGIN不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于innodb存储引擎。

在innodb导出时会建立一致性快照,在保证导出数据的一致性前提下,又不会堵塞其他会话的读写操作。指定这个参数后,其他连接不能执行alter table、drop table、rename table、truncate table这类语句,事务的隔离级别无法空值dd语句。本选项和--lock-tables选项是互斥的,使用参数--single-transaction会自动关闭该选项。

-d,--no-data:只导出表结构,不导出表数据。

-t,--no-create-info:只导出数据,而不添加create table语句。

-f,--force:即使遇到sql错误,也继续执行。

-F,--flush-logs:在执行导出前先刷新二进制日志文件,一般来说,如果是全库导出,建议先刷新日志文件,否则就不用了。

-x,--lock-all-tables:在导出任务执行期间锁定所有数据库的所有表,以保证数据的一致性。这是一个全局锁定,并且自动关闭--single-transaction和--lock-tables选项。这个参数副作用比较大,这是全局锁定,备份执行过程中,该库无法进行读写操作,不是所有业务场景都能接受的。请慎用。

-n,--no-create-db:不生成建库的语句create database...if exists,即使指定--all-database或--database这类参数。

--triggers:导出表的触发器脚本,默认是启用状态。使用--skip-trigger禁用它。

-R,--outlines:导出存储过程以及自定义函数。

1、导出所有数据库

mysqldump -uroot -p123456 -A > all.sql

mysqldump -uroot -p123456 --all-databases > all2.sql

参数-A代表所有,等同于--all-databases

2、导出某个数据库

mysqldump -u 用户名 -p 密码 数据库名 > 导出的文件名.sql

mysqldump -uroot -p123456 book > book.sql

3、导出单张表

mysqldump -uroot -p123456 book books > books.sql    #导出book库books表

4、导出库的表结构

mysqldump -uroot -p123456 -d book>booktable.sql    #只导出book库中的数据

5、只导出数据

mysqldump -uroot -p123456 -t book>bookdata.sql    #只导出book库中的数据

6、导出数据库,并自动生成库的创建语句

mysqldump -uroot -p123456 -B book2 > book2.sql

mysql -uroot -p123456 < book2.sql    导入不用指定数据库名

2.2.2、导入数据:

1、导入所有数据库

mysqldump -uroot -p123456 <all.sql

2、导入数据库

mysql -uroot -p123456 book <book.sql    #如果导入时,没有对应的数据库,需要手动创建:create database book

使用source导入

create database book;

use book;

source /root/book.sql

3、导入表

drop table books;

source /root/book.sql;    #导入表时,不需要重新创建表,要先进到相应的数据库中。

4、导入表结构和数据

create database book;

mysql -uroot -p123456 book<booktable.sql

mysql -uroot -p123456 book<bookdata.sql

MySQL日常维护工具-备份相关推荐

  1. MySQL日常维护(超级大杂烩)

    MySQL 日常维护 其中第一至第六, 每天都需要执行, 第七到第九定期执行(1周或者2周一次?) 一  检查数据库运行状态 1 通过putty.exe登录远程数据库服务器,在shell命令行里面执行 ...

  2. MySQL - 日常操作二 备份还原

    登录mysql的命令 # 格式: mysql -h 主机地址 -u 用户名 -p 用户密码 mysql -h 110.110.110.110 -P3306 -uroot -p mysql -uroot ...

  3. mysql 重要维护工具 图解

      下载地址: http://maatkit.org/get/mk-query-digest更多信息: http://maatkit.org/ | http://code.google.com/p/m ...

  4. MySQL Cluster 日常维护

    在前面几篇文章已经详细介绍了MySQL Cluster的搭建,配置讲解.而且相信大家都掌握了基本用法.现在我们来看看Cluster的日常维护.熟悉日常维护,将有助于工作中更好的管理和使用Cluster ...

  5. MySQL常用维护管理工具

    MySQL是一个非常流行的小型关 系型数据库管理系统,2008年1月16号被Sun公司收购.目前MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总 体拥有成本低,尤其是 ...

  6. mysql维护 运维_MySQL运维之--日常维护操作

    MySQL运维之--日常维护操作 http://blog.csdn.net/guoyjoe/article/details/46697825 一.Linux内核和发行版本 uname -a cat / ...

  7. mysql 5.7 差异备份_MySQL 5.7 新备份工具mysqlpump 使用说明 - 运维小结

    之前详细介绍了Mysqldump备份工具使用,下面说下MySQL5.7之后新添加的备份工具mysqlpump.mysqlpump是mysqldump的一个衍生,mysqldump备份功能这里就不多说了 ...

  8. 使用MySQL自带工具mysqlhotcopy快速备份mysql数据库

    使用MySQL自带工具mysqlhotcopy快速备份mysql数据库 发表于82 天前 ⁄ 网站备份 ⁄ 暂无评论 mysqlhotcopy是一个Perl脚本,最初由Tim Bunce编写并提供.它 ...

  9. mysql 回滚_一个集审核、执行、备份及生成回滚语句于一身的MySQL运维工具

    goInception 一个集审核.执行.备份及生成回滚语句于一身的MySQL运维工具, 通过对执行SQL的语法解析,返回基于自定义规则的审核结果,并提供执行和备份及生成回滚语句的功能 架构图 使用方 ...

最新文章

  1. postgresql数据库的数据导出
  2. jq 截取指定字符前_Python中字符串的切片
  3. (转载)为什么Linux不需要碎片整理?
  4. mysql查看系统运行日志文件_mysql自身运行日志文件详解
  5. ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
  6. 数据结构【高精度专题】
  7. 鸿蒙系统能不能用了,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  8. css学习之border 边框
  9. Unity中脚本的生命周期
  10. 机房重构(4)——触发器的使用
  11. EXTJS源码分析与开发实例-原创2章下载
  12. 斐波那契堆的C++实现
  13. 黑色HTML5网站整站源码
  14. MineCraft建模工具
  15. 富龙飞联手文创产业研究所,推出国内首个AR+文创建设应用系统
  16. 思维导图工具XMind下载
  17. 太空探测器 java_宇宙究竟有多大?这个探测器或将告诉你答案
  18. python-华为路由器交换机批量处理ip与mac绑定
  19. 地理商业智能发展浅析
  20. 异构计算(CPU + GPU)编程简介

热门文章

  1. 计算机无法识别sandisk,为什么我的电脑识别不了sandisk品牌的U盘
  2. 须知的css——margin不重叠的情形
  3. tkinter修改字体颜色
  4. 知书制作书源小白教程第一课
  5. 软件测试中准备测试数据的一些方法
  6. 推荐这几个华为、阿里、腾讯超级牛人的公众号
  7. woe分析_【详解】银行信用评分卡中的WOE在干什么?
  8. Python多线程篇一,theanding库、queue队列、生产者消费者模式爬虫实战代码超详细的注释、自动分配线程对应多任务,GIF演示【傻瓜式教程】
  9. 磨刀霍霍向百度网盘,阿里能否搅活网盘这摊死水?
  10. 【路径规划】基于人工势场法、蝙蝠优化算法、人工鱼群算法、果蝇优化算法的路径规划(Matlab代码实现)