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 ...
随机推荐
- python表单验证封装
在Web程序中往往包含大量的表单验证的工作,如:判断输入是否为空,是否符合规则. <!DOCTYPE html><html><head lang="en&quo ...
- php 中的引用
php 有类似 C 中的指针 &. 但在 php 中叫 引用. 虽然和 传地址很像,但是差别很大.(估计底层实现应该差不多,只是猜想,有机会再研究) 这里有一个关于 php 的对象的赋值其实就 ...
- GitLab 502问题的解决
问题: 502 Whoops, GitLab is taking too much time to respond. 日志: [root@cs12-66-gitlab ~]# my gitlab-ct ...
- EF Code First Migrations数据库迁移 (转帖)
1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...
- select选中事件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- WIN7 X64 下 VS2008升级补丁 (显示隐藏按钮)
原文地址:http://blog.sina.com.cn/s/blog_57b5da120100gk7l.html 更新列表: 2010年3月26日:增加对日文版的支持. 2010年3月3日:更新代码 ...
- tomcat和servlet的关系
一.什么是servlet? 处理请求和发送响应的过程是由一种叫做Servlet的程序来完成的,并且Servlet是为了解决实现动态页面而衍生的东西.理解这个的前提是了解一些http协议的东西,并且知道 ...
- FPGA该如何应对ASIC的大爆发?
有人认为,除了人才短缺.开发难度较大,相比未来的批量化量产的ASIC芯片,FPGA在成本.性能.功耗方面仍有很多不足.这是否意味着,在ASIC大爆发之际,FPGA将沦为其“过渡”品的命运? 安路科技市 ...
- HTML5: SVG (可缩放矢量图形)
ylbtech-HTML5: SVG (可缩放矢量图形) 可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式.它由万维网联盟制定,是一个开放标准. 1. ...
- 帆软报表平台FineReport
报表软件FineReport使用方法 一种方法是从FineReport报表软件中进入:打开设计器,选择“服务器”,点击“报表平台管理”,即可进入.用户首次进入报表平台,系统会要求填写管理员的账户和密码 ...