2016-06-29 40 views
1

私は2016-01-01(Jan)から2016-06-29(June)までのデータを持つ "radacct"というmysqlデータベーステーブルを持っています。何らかの理由により、2016年6月20日から2016年6月26日までのデータが失われます。私はbin-log enabledを持っていたので、 "mysqlbinlog"を使用してbinファイルを.sqlファイルにエクスポートしました。これらのsqlファイルにはJan、Feb、Marchの古いデータが含まれていました。また、2016-06-20から2016-06までに失われたデータ-25。どのように私は現在のデータを失うことなく失われたデータを復元することができます。mysqlbinlogを使ってmysqlデータベーステーブルの特定の日付からデータを復元する

欠損データを含むファイルを.sql(私は欠損データを特定するために日付フィールドを使用)を選択し、INSERT INTOREPLACE INTOに置き換えようと考えています。

HERESにSQLファイルが

#160622 15:06:47 server id 1 end_log_pos 1073739089 Query thread_id=235 exec_time=0  error_code=0 
SET TIMESTAMP=1466622407/*!*/; 
UPDATE radacct SET    acctstoptime  = '2016-06-23 00:51:55',    acctsessiontime = '1',    acctinputoctets = '0' << 32 |         '0',    acctoutputoctets = '0' << 32 |         '0',    acctterminatecause = 'User-Error',    acctstopdelay  = '0',    connectinfo_stop = ''   WHERE acctsessionid = '172784299'   AND username   = 'fusernamehighlands'   AND nasipaddress  = '11.11.11.234' 
/*!*/; 
# at 1073739089 
#160622 15:06:47 server id 1 end_log_pos 1073739162 Query thread_id=235 exec_time=0  error_code=0 
SET TIMESTAMP=1466622407/*!*/; 
COMMIT 
/*!*/; 
# at 1073739162 
#160622 15:06:47 server id 1 end_log_pos 1073739234 Query thread_id=238 exec_time=0  error_code=0 
SET TIMESTAMP=1466622407/*!*/; 
BEGIN 
/*!*/; 
# at 1073739234 
#160622 15:06:47 server id 1 end_log_pos 1073739262 Intvar 
SET INSERT_ID=264950750/*!*/; 
# at 1073739262 
#160622 15:06:47 server id 1 end_log_pos 1073740354 Query thread_id=238 exec_time=0  error_code=0 
SET TIMESTAMP=1466622407/*!*/; 
INSERT INTO radacct    (acctsessionid, acctuniqueid, username,    realm, nasipaddress, nasportid,    nasporttype, acctstarttime, acctstoptime,    acctsessiontime, acctauthentic, connectinfo_start,    connectinfo_stop, acctinputoctets, acctoutputoctets,    calledstationid, callingstationid, acctterminatecause,    servicetype, framedprotocol, framedipaddress,    acctstartdelay, acctstopdelay)   VALUES    ('172784282', '984f06cc1b00ee56',    'fusernamepranish',    '', '11.11.11.234', '297796676',    'Ethernet',    DATE_SUB('2016-06-23 00:51:55',     INTERVAL (1 +     0) SECOND),    '2016-06-23 00:51:55', '1', 'RADIUS', '',    '',    '0' << 32 |    '0',    '0' << 32 |    '0',    '', 'a8:32:9a:00:c3:17',    'User-Error',    'Framed-User', 'PPP', '',    '0', '0') 
/*!*/; 
# at 1073740354 
#160622 15:06:47 server id 1 end_log_pos 1073740381 Xid = 8589937 
COMMIT/*!*/; 
# at 1073740381 
#160622 15:06:47 server id 1 end_log_pos 1073740453 Query thread_id=239 exec_time=0  error_code=0 
SET TIMESTAMP=1466622407/*!*/; 
BEGIN 
/*!*/; 
# at 1073740453 
#160622 15:06:47 server id 1 end_log_pos 1073740481 Intvar 
SET INSERT_ID=264950749/*!*/; 
# at 1073740481 
#160622 15:06:47 server id 1 end_log_pos 1073741574 Query thread_id=239 exec_time=0  error_code=0 
SET TIMESTAMP=1466622407/*!*/; 
INSERT INTO radacct    (acctsessionid, acctuniqueid, username,    realm, nasipaddress, nasportid,    nasporttype, acctstarttime, acctstoptime,    acctsessiontime, acctauthentic, connectinfo_start,    connectinfo_stop, acctinputoctets, acctoutputoctets,    calledstationid, callingstationid, acctterminatecause,    servicetype, framedprotocol, framedipaddress,    acctstartdelay, acctstopdelay)   VALUES    ('172784297', '1afbaf4540c44f65',    'wusernamebadri158',    '', '11.11.11.234', '297796655',    'Ethernet',    DATE_SUB('2016-06-23 00:51:55',     INTERVAL (1 +     0) SECOND),    '2016-06-23 00:51:55', '1', 'RADIUS', '',    '',    '0' << 32 |    '0',    '0' << 32 |    '0',    '', '44:d9:e7:0c:a7:7e',    'User-Error',    'Framed-User', 'PPP', '',    '0', '0') 
/*!*/; 
# at 1073741574 
#160622 15:06:47 server id 1 end_log_pos 1073741601 Xid = 8589935 
COMMIT/*!*/; 
# at 1073741601 
#160622 15:06:47 server id 1 end_log_pos 1073741673 Query thread_id=233 exec_time=0  error_code=0 
SET TIMESTAMP=1466622407/*!*/; 
BEGIN 
/*!*/; 
# at 1073741673 
#160622 15:06:47 server id 1 end_log_pos 1073742164 Query thread_id=233 exec_time=0  error_code=0 
SET TIMESTAMP=1466622407/*!*/; 
UPDATE radacct   SET    framedipaddress = '10.4.72.235',    acctsessiontime  = '0',    acctinputoctets  = '0' << 32 |         '0',    acctoutputoctets = '0' << 32 |         '0'   WHERE acctsessionid = '172784288'   AND username  = 'btwamrit'   AND nasipaddress = '11.11.11.234' 
/*!*/; 
# at 1073742164 
#160622 15:06:47 server id 1 end_log_pos 1073742191 Xid = 8589941 
COMMIT/*!*/; 
# at 1073742191 
#160622 15:06:47 server id 1 end_log_pos 1073742234 Rotate to mysql-bin.000003 pos: 4 
DELIMITER ; 
# End of log file 
ROLLBACK /* added by mysqlbinlog */; 
/*!50003 SET [email protected]_COMPLETION_TYPE*/; 

答えて

2

どのように見えるか、あなたがmysqlbinlog --start-datetime="2016-01-01 00:00:00" --stop-datetime="2016-06-29 23:59:59" <log file> > <sql file path>

+0

で作成したMySQLのバイナリログファイルを持っています.now

The MariaDB server's binary log is a set of files containing "events" which represent modifications to the contents of a MariaDB database. These events are written in a binary (i.e. non-human-readable) format. The mysqlbinlog utility is used to view these events in plain text. Note: binary logging should be enabled on mysql server. to enable it edit my.cnf file and under "[mysqld]" section [mysqld] .... log-bin .... 

再起動MySQLのサービスはそれをテストし、それはまた、既に存在している古いデータが含まれます。 –

+0

古い意味でのデータは、01-Jan-16と30-Jun-16の間ですか? –

+0

はい、それ以前にもデータが挿入されていました。2016-01-01 00:00:00 –

0

を使用することができます私はバイナリログで[data from specific days of the month eg. day 11,12,13]ドロップテーブルのデータを回復するが、中に有用である可能性が役に立つの手順を学んだことができませんでした可能なデータベース障害。あなたは/ var/lib/mysqlでディレクトリ

For example if there are few binlog files like 
ls -1 /var/lib/mysql 
mysql-bin.000051 
mysql-bin.000052 
mysql-bin.000053 
mysql-bin.000054 

the sql file can be generated for those bin files and then later be imported into database 

mysqlbinlog mariadb-bin.000051 > /tmp/mariadb-bin51.sql 
mysqlbinlog mariadb-bin.000052 > /tmp/mariadb-bin51.sql 
... 
OR 
for i in `seq 51 58`;do mysqlbinlog mysql-bin.0000${i} > ${i}-log.sql ; sleep 1 ;done 
関連する問題