仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 881|回复: 7
打印 上一主题 下一主题

[shell编程] 给大家带来shell剧本批量导出MYSQL数据库日记

[复制链接]
冷月葬花魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-14 20:21:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!mysqlbinlog
从二进制日记读取语句的工具。在二进制日记文件中包括的实行过的语句的日记可用来匡助从溃散中规复。


1、MYSQL数据库日记,有以下几种日记:
1.毛病日记:-log-error
2.查询日记:-log
3.慢查询日记:-log-slow-queries
4.更新日记:-log-update
5.二进制日记:-log-bin
这里会商的是MYSQL二进制日记的导出、导进;MYSQL二进制日记完全备份,增量备份。
默许情形下,一切日记创立于mysqld数据目次中,大概手工指定/etc/my.cnf[mysqld]设置段的选项设置。

在linux下:
#在[mysqld]中进

  1. Python[mysqld]log_long_formatlog-bin=/data/mysql/3306/binlogbinlog_cache_size=4Mbinlog_format=MIXEDmax_binlog_cache_size=16Mmax_binlog_size=512Mexpire_logs_days=30
复制代码

以上,开启MYSQL的二进制日记,并指定保留日记的路径。

binlog日记翻开***
在my.cnf这个文件中加一行(Windows为my.ini)。
[mysqld]
log-bin=mysqlbin-log#增加这一行就ok了=号前面的名字本人界说吧
然后我们能够对数据库做复杂的操纵后到mysql数据文件地点的目次来看binlog文件
[root@jimmylimysql]#ll
-rw-rw----1mysqlmysql813255Nov2518:14mysqlbin-log.000001
看到这个相似的文件,证实弄定了。


2、检察二进制日记文件用mysqlbinlog下令

是不是启用了日记
mysql>showvariableslikelog_%;
如何晓得以后的日记
mysql>showmasterstatus;
显现二M制日记数量
mysql>showmasterlogs;
看二进制日记文件用mysqlbinlog
shell>mysqlbinlogmail-bin.000001
大概shell>mysqlbinlogmail-bin.000001|tail9000
检察二进制日记文件最初(倒数)9000行的SQL日记纪录


3、shell剧本批量导出MYSQL数据库日记

依照比来N天的情势导出二进制日记
下面的设置中,MYSQL二进制日记保留了30天,mail-bin.000001相似文件保留的巨细为512M。依据网站的运营必要,必要将MYSQL二进制日记完全备份,增量备份,依照比来N天的情势导出日记文件,以TXT文件保留。
  1. shellshell代码以下:#!/bin/bashiday=60#轮回导出60天的mysqlbinlog日记startday=$(date-d"-$idayday"+"%y-%m-%d")stopday=$(date+"%y-%m-%d")#while["$startday"!="$stopday"]while[$iday-ge1]#while(("$iday">=1))doecho$idaystartday=$(date-d"-$idayday"+"%y-%m-%d")echostartday=$startdayechostopday=$stopday./mysqlbinlog--start-datetime="$startday00:00:00"--stop-datetim="$startday23:59:59"binlog.*[0-9]>$startday.txtecho---------------iday=`expr$iday-1`done实行了局以下[root@JimmyLibin]#./test.sh60startday=12-04-17stopday=12-06-16---------------#两头疏忽#1startday=12-06-15stopday=12-06-16---------------
复制代码


从12-04-17.txt到12-06-15.txt共60天的日记,以天为单元,每个日期天生当天的mysqlbinlog日记。

4、主动当地导出MYSQL二进制日记,按天备份


能够将mysqlbinlog的输入传到mysql客户端以实行包括在二进制日记中的语句。假如你有一个旧的备份,该选项在溃散规复时也很有效:
shell>mysqlbinloghostname-bin.000001|mysql
或:
shell>mysqlbinloghostname-bin.[0-9]*|mysql
shell>mysqlbinloghostname-bin.*[0-9]>bin.txt
假如你必要先修正含语句的日记,还能够将mysqlbinlog的输入从头指向一个文本文件。
(比方,想删除因为某种缘故原由而不想实行的语句)。编纂好文件后,将它输出到mysql步伐并实行它包括的语句。

主动当地导出MYSQL二进制日记,按天备份下令:
shell>./mysqlbinlog--start-datetime="12-06-1600:00:00"--stop-datetim="12-06-1623:59:59"binlog.*[0-9]>12-06-16.txt

5、会商假如MySQL办事器上有多个要实行的二进制日记,宁静的处置***。

mysqlbinlog有一个--position选项,只打印那些在二进制日记中的偏移量年夜于或即是某个给定地位的语句(给出的地位必需婚配一个事务的入手下手)。
它另有在瞥见给定日期和工夫的事务后中断或启动的选项。如许可使用--stop-datetime选项举行点对点规复(比方,可以说“将数据库前转动到明天10:30AM的地位”)。


假如MySQL办事器上有多个要实行的二进制日记,宁静的***是在一个毗连中处置它们。上面是一个申明甚么是不宁静的例子:

shell>mysqlbinloghostname-bin.000001|mysql-uroot
shell>mysqlbinloghostname-bin.000002|mysql-uroot

利用与办事器的分歧毗连来处置二进制日记时,假如第1个日记文件包括一个CREATETEMPORARYTABLE语句,第2个日记包括一个利用该一时表的语句,则会形成成绩。当第1个mysql历程停止时,办事器打消一时表。当第2个mysql历程想利用该表时,办事器呈报“不晓得该表”。
要想制止此类成绩,利用一个毗连来实行想要处置的一切二进制日记中的内容。上面供应了一种***:
shell>mysqlbinloghostname-bin.000001hostname-bin.000002|mysql
另外一个***是:
shell>mysqlbinloghostname-bin.000001>/tmp/statements.sql
shell>mysqlbinloghostname-bin.000002>>/tmp/statements.sql
shell>mysql-e"source/tmp/statements.sql"

mysqlbinlog发生的输入能够不必要原数据文件便可从头天生一个LOADDATAINFILE操纵。mysqlbinlog将数据复制到一个一时文件并写一个援用该文件的LOADDATALOCALINFILE语句。由体系断定写进这些文件的目次的默许地位。要想显式指定一个目次,利用--local-load选项。
由于mysqlbinlog能够将LOADDATAINFILE语句转换为LOADDATALOCALINFILE语句(也就是说,它增加了LOCAL),用于处置语句的客户端和办事器必需设置为同意LOCAL操纵。
告诫:为LOADDATALOCAL语句创立的一时文件不会主动删除,由于在实践实行完那些语句前必要它们。不再必要语句日记后应本人删除一时文件。文件位于一时文件目次中,文件名相似original_file_name-#-#。

6、其他检察MYSQL日记的相干下令

1.检察本人的BINLOG的名字是甚么
下令:showbinarylogs;
mysql>showbinarylogs;
+---------------+-----------+
|Log_name|File_size|
+---------------+-----------+
|binlog.000044|471894871|
|binlog.000045|267061|
+---------------+-----------+
2rowsinset(0.00sec)

今后每次对表的相干操纵时分,这个File_size城市增年夜。

2.做了几回操纵后,它就纪录了上去。

下令:showbinlogevents

3.用mysqlbinlog工具来显现纪录的二进制了局,然后导进到文本文件,为了今后的规复。

具体历程以下:
C:ProgramFilesMySQLMySQLServer5.0in>mysqlbinlog--start-position=4--sto

p-position=106mysqlbin-log.000001>c:        est1.txt
大概全体导出:
C:ProgramFilesMySQLMySQLServer5.0in>mysqlbinlogmysqlbin-log.000001>c:        est1.txt

4.导进了局到MYSQL中举行数据规复。

C:ProgramFilesMySQLMySQLServer5.0in>mysqlbinlog--start-position=134--stop-position=330mysqlbin-log.000001|mysql-uroot-p
大概
C:ProgramFilesMySQLMySQLServer5.0in>mysqlbinlog--start-position=134--stop-position=330mysqlbin-log.000001>test1.txt
进进MYSQL导进
mysql>sourcec:        est1.txt
另有一种举措是依据日期来规复
C:ProgramFilesMySQLMySQLServer5.0in>mysqlbinlog--start-datetime="2009-09-140:20:00"--stop-datetim="2009-09-1501:25:00"/diskb/bin-logs/***_db-bin.000001|mysql-uroot
5、检察数据
Select*fromUser
6、其他MYSQL日记下令
是不是启用了日记
mysql>showvariableslikelog_%;
如何晓得以后的日记
mysql>showmasterstatus;
显现二M制日记数量
mysql>showmasterlogs;
看二进制日记文件用mysqlbinlog
shell>mysqlbinlogmail-bin.000001
大概shell>mysqlbinlogmail-bin.000001|tail9000
检察二进制日记文件最初(倒数)9000行的SQL日记纪录


附录:

mysqlbinlog用法具体申明
办事器天生的二进制日记文件写成二进制格局。要想反省这些文本格局的文件,应利用mysqlbinlog有用工具。
应如许挪用mysqlbinlog:
shell>mysqlbinlog[options]log-files...比方,要想显现二进制日记binlog.000003的内容,利用上面的下令:
shell>mysqlbinlogbinlog.0000003输入包含在binlog.000003中包括的一切语句,和别的信息比方每一个语句消费的工夫、客户收回的线程ID、收回线程时的工夫戳等等。
一般情形,可使用mysqlbinlog间接读取二进制日记文件并将它们用于当地MySQL办事器。也能够利用--read-from-remote-server选项从近程办事器读取二进制日记。
当读取近程二进制日记时,能够经由过程毗连参数选项来唆使怎样毗连办事器,但它们常常被疏忽失落,除非你还指定了--read-from-remote-server选项。这些选项是--host、--password、--port、--protocol、--socket和--user。
还可使用mysqlbinlog来读取在复制过程当中从办事器所写的中继日记文件。中继日记格局与二进制日记文件不异。

mysqlbinlog撑持上面的选项:

---help,-?
显现匡助动静并加入。

---database=db_name,-ddb_name
只列出该数据库的条目(只用当地日记)。

--force-read,-f
利用该选项,假如mysqlbinlog读它不克不及辨认的二进制日记事务,它会打印告诫,疏忽该事务并持续。没有该选项,假如mysqlbinlog读到此类事务则中断。

--hexdump,-H
在正文中显现日记的十六进制转储。该输入能够匡助复制过程当中的调试。在MySQL5.1.2中增加了该选项。

--host=host_name,-hhost_name
猎取给定主机上的MySQL办事器的二进制日记。

--local-load=path,-lpat
为指定目次中的LOADDATAINFILE预处置当地一时文件。

--offset=N,-oN
跳过前N个条目。

--password[=password],-p[password]
当毗连办事器时利用的暗码。假如利用短选项情势(-p),选项和暗码之间不克不及有空格。假如在下令行中--password或-p选项前面没有暗码值,则提醒输出一个暗码。

--port=port_num,-Pport_num
用于毗连近程办事器的TCP/IP端标语。

--position=N,-jN
不同意利用,应利用--start-position。

--protocol={TCP|SOCKET|PIPE|-position

利用的毗连协定。

--read-from-remote-server,-R
从MySQL办事器读二进制日记。假如未给出该选项,任何毗连参数选项将被疏忽。这些选项是--host、--password、--port、--protocol、--socket和--user。

--result-file=name,-rname
将输入指向给定的文件。

--short-form,-s
只显现日记中包括的语句,不显现别的信息。

--socket=path,-Spath
用于毗连的套接字文件。

--start-datetime=datetime
从二进制日记中第1个日期工夫即是或晚于datetime参量的事务入手下手读取。datetime值相对运转mysqlbinlog的呆板上的当地时区。该值格局应切合DATETIME或TIMESTAMP数据范例。比方:
shell>mysqlbinlog--start-datetime="2004-12-2511:25:56"binlog.000003该选项能够匡助点对点规复。

--stop-datetime=datetime
从二进制日记中第1个日期工夫即是或晚于datetime参量的事务起中断读。关于datetime值的形貌拜见--start-datetime选项。该选项能够匡助实时规复。

--start-position=N
从二进制日记中第1个地位即是N参量时的事务入手下手读。

--stop-position=N
从二进制日记中第1个地位即是和年夜于N参量时的事务起中断读。

--to-last-logs,-t
在MySQL办事器中哀求的二进制日记的开头处一直止,而是持续打印直到最初一个二进制日记的开头。假如将输入发送给统一台MySQL办事器,会招致无穷轮回。该选项请求--read-from-remote-server。

--disable-logs-bin,-D
禁用二进制日记。假如利用--to-last-logs选项将输入发送给统一台MySQL办事器,能够制止无穷轮回。该选项在溃散规复时也很有效,能够制止复制已纪录的语句。正文:该选项请求有SUPER权限。

--user=user_name,-uuser_name
毗连近程办事器时利用的MySQL用户名。

--version,-V
显现版本信息并加入。
还可使用--var_name=value选项设置上面的变量:

open_files_limit
指定要保存的翻开的文件形貌符的数目。

--hexdump选项能够在正文中发生日记内容的十六进制转储:
shell>mysqlbinlog--hexdumpmaster-bin.000001上述下令的输入应相似十六进制转储:


出处:http://jimmyli.blog.51cto.com/JimmyLiBlog

欢迎大家来到仓酷云论坛!
乐观 该用户已被删除
沙发
发表于 2015-1-16 10:44:06 | 只看该作者

给大家带来shell剧本批量导出MYSQL数据库日记

linux鸟哥的私房菜,第三版,基础篇,网上有pdf下的,看它的目录和每章的介绍就行了,这个绝对原创!
透明 该用户已被删除
板凳
发表于 2015-1-22 05:43:50 | 只看该作者
有疑问前,知识学习前,先用搜索。
灵魂腐蚀 该用户已被删除
地板
发表于 2015-1-30 23:20:58 | 只看该作者
安装一个新的软件时先看README,再看INSTALL然后看FAQ,最后才动手安装,这样遇到问题就知道为什么。如果Linux说明文档不看,结果出了问题再去论坛来找答案反而浪费时间。
简单生活 该用户已被删除
5#
发表于 2015-2-17 19:07:11 | 只看该作者
你需要提供精确有效的信息。Linux这并不是要求你简单的把成吨的出错代码或者数据完全转储摘录到你的提问中。
老尸 该用户已被删除
6#
发表于 2015-3-5 23:21:16 | 只看该作者
Linux简单,占内存少,特别是对于程序开发人员来说很方便,如果说windows的成功在于其方便用户的窗口管理界面。
愤怒的大鸟 该用户已被删除
7#
发表于 2015-3-12 17:09:16 | 只看该作者
甚至目前许多应用软件都是基于它的。可是没有哪一个系统是十分完美的。
只想知道 该用户已被删除
8#
发表于 2015-3-20 01:31:41 | 只看该作者
熟悉系统的基本操作,Linux的图形界面直观,操作简便,多加上机练习就可熟悉操作,在Linux下学习办公软件等常用软件。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-14 14:48

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表