mysql数据库的维护,备份和复制
在数据库运行时维护数据库
执行mysql数据库维护的方法之一就是连接mysql服务器,并告诉它做什么事,
如对myisam数据表进行检查或者修复, 可以使用check table tbname或repar table tbname(或者运行sqlcheck程序)让mysql服务器去做这项工作。
mysql> check table role;
+-----------+-------+----------+-------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+-----------+-------+----------+-------------------------------------------------------+
| test.role | check | warning | 1 client is using or hasn't closed the table properly |
| test.role | check | status | OK |
+-----------+-------+----------+-------------------------------------------------------+
2 rows in set (0.01 sec)
mysql> repair table role;
+-----------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+-----------+--------+----------+----------+
| test.role | repair | status | OK |
+-----------+--------+----------+----------+
1 row in set (0.00 sec)
使用mysqlcheck检查表
-c, --check (检查表);
-r, --repair(修复表);
-a, --analyze (分析表);
-o, --optimize(优化表);
[root@host test]# mysqlcheck -uroot -proot test role -a
test.role Table is already up to date
[root@host test]# mysqlcheck -uroot -proot test role -c
test.role OK
检查一个表
[root@host test]# mysqlcheck -uroot -proot test role
test.role OK
检查一个库
[root@host test]# mysqlcheck -uroot -proot test
test.gamelog OK
test.log1 OK
test.log2 OK
test.log_merge OK
test.loginlog OK
test.name_test OK
test.name_test1 OK
test.role OK
检查所有库
[root@host test]# mysqlcheck -uroot -proot -A -c
metastore.BUCKETING_COLS OK
metastore.CDS OK
..................................
metastore.VERSION OK
mysql.columns_priv OK
mysql.proc OK
mysql.procs_priv OK
mysql.servers OK
mysql.slow_log
test.name_test1 OK
test.role OK
........................
执行mysql维护操作的另一种方法,使用不依赖mysql服务器的外部程序.如myisamchk,在使用它修复表示,一定要保证mysql服务器不会在期间访问它,不然会导致更严重问题。
不行让mysql服务器打扰你,最有效分方式就是关掉mysql服务器。呵呵
如果不想关掉mysql服务器,又不想mysql服务器与外部程序相互干扰,必须使用锁定机制与服务器进行协调。
mysql提供了两种锁定机制。
内部锁定机制,mysql服务器使用这一机制防止来自不同客户程序的查询请求相互混乱和干扰;
外部锁定机制,mysql服务器使用这一机制防止其他程序修改它正在使用的数据表文件;
以只读方式或读/写方式锁定一个或者多个数据表
mysql服务器利用内部锁定机制阻止它访问你正在处理的数据表,基本思路就是用mysql程序连接到mysql服务器并发出一条lock table的语句锁定你打算使用的数据表,然后把这个mysql会话闲置在那里,你数据表文件做你想做的事情;完成之后切换回mysql会话并释放锁定的数据表,让mysql服务器可以重新使用它。如果发出锁定语句的mysql回话被关闭,则锁定也会随之失效。
如果检查或者复制某个文件,只读方式锁定就足够了。
如果修改某个文件,应该以读写方式锁定。
lock table xxx read,只读方式锁住xxx,该表只能被select,不能被修改。如果在lock时,该表上存在事务,则lock语句挂起,直到事务结束。多个会话可以同时对表执行该操作。
lock table xxx write,读写方式锁住xxx,lock table的会话可以对表xxx做修改及查询等操作,而其他会话不能对该表做任何操作,包括select也要被阻塞。
还可以使用flush table xxx通知mysql服务器把挂起的改动写入硬盘.解锁前再次flush table xxx
show open tables;列举在表缓存中当前被打开的非TEMPORARY表。
mysql> select connection_id(); 用于查看当前用户的连接数
+-----------------+
| connection_id() |
+-----------------+
| 56 |
+-----------------+
1 row in set (0.00 sec)
以只读方式锁定所有数据库:
flush tables with read lock;
set GLOBAL read_only=on;
解除锁定
set GLOBAL read_only=off;
UNLOCK tables;
充分利用mysql的自动恢复能力
mysql服务器的崩溃恢复能力是数据库完整维护工作的第一条防线,事务型存储引擎的自动恢复在mysql服务器启动时会自动发生,myisam自动恢复是可选的,需要明确启用(配置文件配置:myisam_recover_options=force,backup)。
定期进行预防性维护
制作数据库备份
防止数据库丢失,损坏;把一个数据库复制到另一个mysql服务器;建立复制服务器(主从)
数据库备份按照格式可以分为两类:
1.文本格式备份。这种备份通过使用mysqldump程序将数据表内容写到转储文件(dump file)而得到的,内容由create table和insert两种语句构成,把转储文件重新加载到mysql服务器就可以恢复有关数据表。
2.二进制文件备份。直接复制包含数据表内容的文件而得到的。制作这类备份有多重方法,如mysqlhotcopy,cp,tar等都可以进行数据库的二进制备份。
每种备份都有各自的优缺点:
mysqldump必须和mysql服务器配合使用,备份时,mysql服务器必须是运行状态。
二进制备份是在mysql服务器外部进行的文件操作,这些方法有些需要关停mysql服务器;对于不关停mysql服务器的二进制备份方法,必须保证在你复制mysql数据表文件时不会修改数据表。
mysqldump比二进制备份速度要慢,因为转储操作需要通过网络在mysqldump程序和mysql服务器之间传输信息。二进制备份是直接在文件系统级进行文件复制。
mysqldump生成的的sql的文本文件,容易移植到其他机器上。
mysqldump输出的只包括数据库信息如表,视图,存储例程等,不包括没被保存的数据库信息,如配置文件,日志文件等;二进制备份选择余地就到了,可以在备份时复制任何一个文件。
备份原则
定期备份;备份文件名规则;备份文件不和数据库放在同一个文件系统;定期清除备份文件,防止占用更多空间;
用mysqldump程序制作文本备份
1.备份所有数据库
[root@host test]# mysqldump -hlocalhost -u root -proot --all-databases >/root/dbbak/alldatabases_20180302.sql
2.备份指定若干数据库(下例备份2个数据库)
[root@host test]# mysqldump -hlocalhost -u root -proot --databases test metastore >/root/dbbak/test_mata_20180302.sql
3.备份一个数据库
[root@host test]# mysqldump -hlocalhost -u root -proot test>/root/dbbak/test_20180302.sql
4.备份表(备份test库的表role,表log1)
[root@host test]# mysqldump -hlocalhost -u root -proot test role log1>/root/dbbak/role_log1_20180302.sql
压缩备份
[root@host test]# mysqldump -hlocalhost -u root -proot test role log1|gzip>/root/dbbak/role_log1_20180302.zip
文件如下:压缩后明显小了很多
-rw-r--r-- 1 root root 2900 Mar 2 10:29 role_log1_20180302.sql
-rw-r--r-- 1 root root 949 Mar 2 10:33 role_log1_20180302.zip
导入全备数据
[root@host ~]# mysql -u root -proot test </root/tmpdata/game3004.sql
mysql> source /root/tmpdata/game3004.sql;
mysqldump程序有许多选项
mysqldump给出一个库名,后面跟一个或者多个表名
mysqldump 后面使用--databases,后面跟多个库名可以一次转储多个数据库的数据表
mysqldump 后面使用--databases或者--all-databases,后面不给出任何数据库名或其他参数,则转储MYSQL服务器下的数据库
--opt可以对转储进行优化
二进制备份
直接复制数据库文件,典型做法是使用文件系统工具(cp,tar或者rsync),或者使用专门的工具(mysqlhotcopy或者InnoDB hot backup)
直接复制法备份需要1.最好的办法就是关停mysql服务器 2.一定要把恢复表所需要的所有文件全部复制下来
制作一个完整的二进制备份
mysql数据库的维护,备份和复制的更多相关文章
- mysql数据库的增量备份和全备
还有一种简单的方法 参考 https://blog.csdn.net/u010098331/article/details/50932064 (注意:5.6版本以上新加了gtid 功能,gtid开启之 ...
- 阿里云 如何减少备份使用量? mysql数据库的完整备份、差异备份、增量备份
RDS for MySQL备份.SQL审计容量相关问题_MYSQL使用_技术运维问题_云数据库 RDS 版-阿里云 https://help.aliyun.com/knowledge_detail/4 ...
- MySQL数据库的定时备份
1. 创建shell脚本 vim backupdb.sh 创建脚本内容如下: #!/bin/sh db_user="root" db_passwd=" db_name=& ...
- Mysql数据库如何自动备份
Mysql数据库如何自动备份 一.总结 一句话总结:用navicat配合windows的批处理即可 navicat windows批处理 二.Mysql数据库自动备份 参考:Mysql数据库自动备份 ...
- 知识点:Navicet Mysql数据库电脑本地备份
Navicet Mysql数据库电脑本地备份 1.打开navicat客户端,连上mysql后,双击左边你想要备份的数据库.点击“计划”,再点击“新建批处理作业”. 2.双击上面的可用任务,它就 ...
- Navicet Mysql数据库电脑本地备份
Navicet Mysql数据库电脑本地备份 1.打开navicat客户端,连上mysql后,双击左边你想要备份的数据库.点击"计划",再点击"新建批处理作业" ...
- 实现MySQL数据库的实时备份
实现MySQL数据库的实时备份 使用MySQL Replication 吴剑 2018-08-03 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian 吴剑 ht ...
- linux下应用crontab对mysql数据库进行定时备份
linux下应用crontab对mysql数据库进行定时备份 @(编程) mysql数据库提供了备份命令mysqldump,可以结合crontab命令进行定时备份. 我写了一个mysqlbackup. ...
- Mysql数据库自动定时备份软件推荐--MySqlBackupFTP(免费,亲测可用,附使用图示)
MySqlBackupFTP是一款Mysql数据库自动定时备份软件,免费版本就基本上可以满足我们的需求,不需要什么破解版,可直接官网下载安装使用. 先看结果(日志): 软件界面: 可以设定计划任务,每 ...
- Linux下实现mysql数据库每天自动备份
Linux下实现mysql数据库每天自动备份 1.基本操作步骤 a.创建备份目录 mkdir -m 777 /home/wwwroot/backup b.创建备份脚本sh vim /home/wwwr ...
随机推荐
- 各种CTF的WP
http://l-team.org/archives/43.html PlaidCTF-2014-twenty/mtpox/doge_stege-Writeup http://l-team.org/a ...
- python open和file的区别
opne和file都是用来对文件的操作 open:内置函数,使用方式是open('file_name', mode, buffering),返回值是一个file对象,以写模式打开文件如果不存在会被创建 ...
- UVA11525 【Permutation】
分析 简述"康托展开" 康托展开是一个全排列到一个自然数的双射,常用于构建hash表时的空间压缩.设有\(n\)个数\((1,2,3,4,-,n)\),可以有组成不同(\(n!\) ...
- mac 终端显示彩色
修改~/.bash_profile文件,在文件中加入下面两行配置. export CLICOLOR=1 export LSCOLORS=gxfxaxdxcxegedabagacad 保存文件, ...
- elastic search 日期为string类型导致视图无法展示时间的解决办法
尝试将结构化的json数据发送到es(elastic search)上,然后创建视图,这样就能以小时维度查看数据,直接使用post发送到es后,创建索引,结果提示 没有date类型的字段(field) ...
- smarty学习——编写扩展
在进行了以上的开发环境的配置之后就是,进行进一步的学习,为了开发的方便我们一般会使用oop的编程思想,进行方便的处理 如下: 1.smartyUser 的创建 <?php require_onc ...
- 基于windows IIS的C语言CGI WEB服务器环境搭建
网页编程对我来说特别亲切,因为我就是从html.ASP.PHP一步步接触编程的.自己的编程爱好也是从那里一点一点被满足.不过离开大学之后很久没有碰过WEB了,最近看到嵌入式中的涉及到的web服务器,了 ...
- Spring boot 使用的注解有哪些?
Spring boot 使用的注解有哪些? 注解 作用 @SpringBootApplication 等价于 @Configuration + @EnableAutoConfiguration + @ ...
- matplotlib y轴标注显示不全以及subplot调整的问题
matplotlib y轴标注显示不全以及subplot调整的问题 问题: 我想在y轴显示的标注太长,想把它变成两行显示,发现生成的图形只显示的第二行的字,把第一行的字挤出去了 想要的是显示两行这样子 ...
- Oracle Grid control 11g及Active DataGuard 11g安装部署
Oracle Grid control 11g及Active DataGuard 11g安装部署(一) 原贴 http://blog.csdn.net/lichangzai/article/detai ...