在数据库运行时维护数据库

执行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数据库的维护,备份和复制的更多相关文章

  1. mysql数据库的增量备份和全备

    还有一种简单的方法 参考 https://blog.csdn.net/u010098331/article/details/50932064 (注意:5.6版本以上新加了gtid 功能,gtid开启之 ...

  2. 阿里云 如何减少备份使用量? mysql数据库的完整备份、差异备份、增量备份

    RDS for MySQL备份.SQL审计容量相关问题_MYSQL使用_技术运维问题_云数据库 RDS 版-阿里云 https://help.aliyun.com/knowledge_detail/4 ...

  3. MySQL数据库的定时备份

    1. 创建shell脚本 vim backupdb.sh 创建脚本内容如下: #!/bin/sh db_user="root" db_passwd=" db_name=& ...

  4. Mysql数据库如何自动备份

    Mysql数据库如何自动备份 一.总结 一句话总结:用navicat配合windows的批处理即可 navicat windows批处理 二.Mysql数据库自动备份 参考:Mysql数据库自动备份 ...

  5. 知识点:Navicet Mysql数据库电脑本地备份

    Navicet Mysql数据库电脑本地备份 1.打开navicat客户端,连上mysql后,双击左边你想要备份的数据库.点击“计划”,再点击“新建批处理作业”.     2.双击上面的可用任务,它就 ...

  6. Navicet Mysql数据库电脑本地备份

    Navicet Mysql数据库电脑本地备份 1.打开navicat客户端,连上mysql后,双击左边你想要备份的数据库.点击"计划",再点击"新建批处理作业" ...

  7. 实现MySQL数据库的实时备份

    实现MySQL数据库的实时备份 使用MySQL Replication 吴剑 2018-08-03 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian 吴剑 ht ...

  8. linux下应用crontab对mysql数据库进行定时备份

    linux下应用crontab对mysql数据库进行定时备份 @(编程) mysql数据库提供了备份命令mysqldump,可以结合crontab命令进行定时备份. 我写了一个mysqlbackup. ...

  9. Mysql数据库自动定时备份软件推荐--MySqlBackupFTP(免费,亲测可用,附使用图示)

    MySqlBackupFTP是一款Mysql数据库自动定时备份软件,免费版本就基本上可以满足我们的需求,不需要什么破解版,可直接官网下载安装使用. 先看结果(日志): 软件界面: 可以设定计划任务,每 ...

  10. Linux下实现mysql数据库每天自动备份

    Linux下实现mysql数据库每天自动备份 1.基本操作步骤 a.创建备份目录 mkdir -m 777 /home/wwwroot/backup b.创建备份脚本sh vim /home/wwwr ...

随机推荐

  1. Maze dfs倒行

    Pavel loves grid mazes. A grid maze is an n × m rectangle maze where each cell is either empty, or i ...

  2. 状压dp终极篇(状态转移的思想)

    状压dp是将每种状态都压缩成用一个二进制串,然后利用位运算进行操作的dp,而凡是dp都需要进行状态转移 对于简单的dp问题只需要一个二维数组dp[ i ][ j ]就能解决 具体操作为首先把状态压缩为 ...

  3. 最短路--spfa+队列优化模板

    spfa普通版就不写了,优化还是要的昂,spfa是可以判负环,接受负权边和重边的,判断负环只需要另开一个数组记录每个结点的入队次数,当有任意一个结点入队大于点数就表明有负环存在 #include< ...

  4. jquery选择器总结2

    1.JQuery的概念 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用一些简单的代码实现一些复杂的JS效果. 2.JQuery实现了 代码的分离 不用再网页 ...

  5. MySQL Transaction--快照读和当前读

    在MySQL读取数据时可以按照是否使用一致性非锁定读来分为快照读和当前读:1.快照读:MySQL使用MVCC (Multiversion Concurrency Control)机制来保证被读取到数据 ...

  6. c++中的流

    streambuf类为缓冲区提供内存,并提供了用于填充缓冲区,访问缓冲区,刷新新缓冲区和管理缓冲区内存的类方法. ios_base类表示流的一般特征,如是否可读,是二进制还是文本流等. ios类基于i ...

  7. Linux开机自动启动ORACLE设置

    1.安装好Oracle数据库后: 执行 dbstart和dbshut会提示: [oracle@oracle11g ~]$ dbstartORACLE_HOME_LISTNER is not SET, ...

  8. POJ1015陪审团(Jury Compromise)——dp+路径记录

    题目:http://poj.org/problem?id=1015 差值是有后效性的,所以“转化为可行性”,开一维记录“能否达到这个差值”. 当然可以开两维分别记录 a 和 b,但 “值只是0或1” ...

  9. js jquery 设置cookie

    转自http://yaoqianglilan.blog.163.com/blog/static/70978316201091810435251/ 本人亲测setcookie() getcookie() ...

  10. thinkphp.2 thinkphp5微信支付 微信公众号支付 thinkphp 微信扫码支付 thinkphp 微信企业付款5

    前面已经跑通了微信支付的流程,接下来吧微信支付和微信企业付款接入到thinkphp中,版本是3.2 把微信支付类.企业付款类整合到一起放到第三方类库,这里我把微信支付帮助类和企业付款类放到同一个文件了 ...