MySQL日常维护工具-备份
目录
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日常维护工具-备份相关推荐
- MySQL日常维护(超级大杂烩)
MySQL 日常维护 其中第一至第六, 每天都需要执行, 第七到第九定期执行(1周或者2周一次?) 一 检查数据库运行状态 1 通过putty.exe登录远程数据库服务器,在shell命令行里面执行 ...
- MySQL - 日常操作二 备份还原
登录mysql的命令 # 格式: mysql -h 主机地址 -u 用户名 -p 用户密码 mysql -h 110.110.110.110 -P3306 -uroot -p mysql -uroot ...
- mysql 重要维护工具 图解
下载地址: http://maatkit.org/get/mk-query-digest更多信息: http://maatkit.org/ | http://code.google.com/p/m ...
- MySQL Cluster 日常维护
在前面几篇文章已经详细介绍了MySQL Cluster的搭建,配置讲解.而且相信大家都掌握了基本用法.现在我们来看看Cluster的日常维护.熟悉日常维护,将有助于工作中更好的管理和使用Cluster ...
- MySQL常用维护管理工具
MySQL是一个非常流行的小型关 系型数据库管理系统,2008年1月16号被Sun公司收购.目前MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总 体拥有成本低,尤其是 ...
- mysql维护 运维_MySQL运维之--日常维护操作
MySQL运维之--日常维护操作 http://blog.csdn.net/guoyjoe/article/details/46697825 一.Linux内核和发行版本 uname -a cat / ...
- mysql 5.7 差异备份_MySQL 5.7 新备份工具mysqlpump 使用说明 - 运维小结
之前详细介绍了Mysqldump备份工具使用,下面说下MySQL5.7之后新添加的备份工具mysqlpump.mysqlpump是mysqldump的一个衍生,mysqldump备份功能这里就不多说了 ...
- 使用MySQL自带工具mysqlhotcopy快速备份mysql数据库
使用MySQL自带工具mysqlhotcopy快速备份mysql数据库 发表于82 天前 ⁄ 网站备份 ⁄ 暂无评论 mysqlhotcopy是一个Perl脚本,最初由Tim Bunce编写并提供.它 ...
- mysql 回滚_一个集审核、执行、备份及生成回滚语句于一身的MySQL运维工具
goInception 一个集审核.执行.备份及生成回滚语句于一身的MySQL运维工具, 通过对执行SQL的语法解析,返回基于自定义规则的审核结果,并提供执行和备份及生成回滚语句的功能 架构图 使用方 ...
最新文章
- postgresql数据库的数据导出
- jq 截取指定字符前_Python中字符串的切片
- (转载)为什么Linux不需要碎片整理?
- mysql查看系统运行日志文件_mysql自身运行日志文件详解
- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- 数据结构【高精度专题】
- 鸿蒙系统能不能用了,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可
!【手机吧】_百度贴吧...
- css学习之border 边框
- Unity中脚本的生命周期
- 机房重构(4)——触发器的使用
- EXTJS源码分析与开发实例-原创2章下载
- 斐波那契堆的C++实现
- 黑色HTML5网站整站源码
- MineCraft建模工具
- 富龙飞联手文创产业研究所,推出国内首个AR+文创建设应用系统
- 思维导图工具XMind下载
- 太空探测器 java_宇宙究竟有多大?这个探测器或将告诉你答案
- python-华为路由器交换机批量处理ip与mac绑定
- 地理商业智能发展浅析
- 异构计算(CPU + GPU)编程简介
热门文章
- 计算机无法识别sandisk,为什么我的电脑识别不了sandisk品牌的U盘
- 须知的css——margin不重叠的情形
- tkinter修改字体颜色
- 知书制作书源小白教程第一课
- 软件测试中准备测试数据的一些方法
- 推荐这几个华为、阿里、腾讯超级牛人的公众号
- woe分析_【详解】银行信用评分卡中的WOE在干什么?
- Python多线程篇一,theanding库、queue队列、生产者消费者模式爬虫实战代码超详细的注释、自动分配线程对应多任务,GIF演示【傻瓜式教程】
- 磨刀霍霍向百度网盘,阿里能否搅活网盘这摊死水?
- 【路径规划】基于人工势场法、蝙蝠优化算法、人工鱼群算法、果蝇优化算法的路径规划(Matlab代码实现)