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 ...
随机推荐
- && 和 || 运算
a() && b() :如果执行a()后返回true,则执行b()并返回b的值:如果执行a()后返回false,则整个表达式返回a()的值,b()不执行: a() || b() :如果 ...
- signal()信号操作
一.函数描述 #include <signal.h> typedef void (*sighandler_t)(int);sighandler_t signal(int signum, s ...
- day37 mysql数据库学习
3.什么是数据库 用来存储数据的仓库 数据是以文件的形式保存 海峰补充内容 ↓ 4 数据库服务器.数据管理系统.数据库.表与记录的关系(重点理解!!!) 记录:1 刘海龙 324245234 2 ...
- STL版本号简单介绍
说明:本文仅供学习交流.转载请标明出处.欢迎转载! 本文的參考文献为:<STL源代码剖析>侯捷 (1)HP STL:全部STL的祖先版本号,由C++之父Alexander S ...
- nnlog模块使用
安利一个好用的写日志模块,python自带的logging模块理解起来比较费劲,直接pip install nnlog即可 使用例子如下代码: 1 2 3 4 5 6 7 8 9 10 11 12 ...
- load-display-image之c#版
基本功能 能够从文件load图像 -->显示图像-->在图像上方显示graphics,比如几条线-->鼠标移动,显示鼠标位置的灰度 load-display-image之c#版 lo ...
- RAC1——Clusterware概念简介1
一 集群环境下的一些特殊问题 1.1 并发控制 在集群环境中, 关键数据通常是共享存放的,比如放在共享磁盘上. 而各个节点的对数据有相同的访问权限, 这时就必须有某种机制能够控制节点对数据的访问. O ...
- bzoj 4137 [FJOI2015]火星商店问题——线段树分治+可持久化01trie树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4137 关于可持久化01trie树:https://www.cnblogs.com/LadyL ...
- R(2) sample
sample: 从整体中挑出部分样本数据函数 Usage: sample.int(n, size = n, replace = FALSE, prob = NULL) x:可以是R中任何对象 siz ...
- Spring的IOC原理 通俗解释
1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械 ...