1. 程式人生 > >mysql系列之5.mysql備份恢復

mysql系列之5.mysql備份恢復

備份資料: mysqldump

#mysqldump -uroot -p123456 test > /test_bak.sql

#egrep -v "#|\*|--|^$" /test_bak.sql

指定對應字符集

#mysqldump -uroot -p123456 --default-character-set=utf8 test > /test_bak.sql

加 -B 引數: 備份多個庫 (增加建立資料庫和連線資料庫的命令)

#mysqldump -uroot -p123456 -B test > /test_bak.sql

#mysqldump -uroot -p123456 -B test test2 > /test_bak.sql

加 --compact 引數: 減少備份檔案的輸出(忽略drop table, 忽略set names, 忽略add locks, 忽略disable keys), 所以這個引數生產環境不用它!!

#mysqldump -uroot -p123456 --compact -B test > /test_bak.sql

備份單個表: 不能加 -B 引數

#mysqldump -uroot -p123456 test tb2 > /test_bak.sql

備份所有表: -A 引數

#mysqldump -uroot -p123456 -A -B test > /test_bak.sql

只備份資料: -t 引數

#mysqldump -uroot -p123456 -t -B test tb2 > /test_bak.sql

只備份結構: -d 引數

#mysqldump -uroot -p123456 -d -B test > /test_bak.sql

鎖表: -x 鎖定所有表,    -l 只讀鎖表

innodb事務資料庫備份:  --single-transaction

#mysqldump -uroot -p123456 -A -B --master-data=2 --events --single-transaction|gzip > /all.sql.gz

myisam資料庫庫備份:

#mysqldump -uroot -p123456 -A -B --master-data=2 -x --events|gzip > /all.sql.gz

增量備份: 重新整理binlog, -F 引數

#mysqldump -uroot -p123456 -F -B test > /test_bak.sql

增量備份: 不重新整理binlog

#mysqldump -uroot -p123456 --master-data=1 test > /test_bak.sql

--master-data引數詳解

mysqldump匯出資料時,當這個引數的值為1的時候,mysqldump出來的檔案就會包括CHANGE MASTER TO這個語句,CHANGE MASTER TO後面緊接著就是file和position的記錄,在slave上匯入資料時就會執行這個語句,salve就會根據指定這個檔案位置從master端複製binlog。預設情況下這個值是1

當這個值是2的時候,chang master to也是會寫到dump檔案裡面去的,但是這個語句是被註釋的狀態。

分庫備份: .sh指令碼

#!/bin/sh

MYUSER=root

MYPASS=123456

MYLOGIN="mysql -u$MYUSER -p$MYPASS"

MYDUMP="mysqldump -u$MYUSER -p$MYPASS -B"

MYDUMP2="mysqldump -u$MYUSER -p$MYPASS"

DATABASE="$($MYLOGIN -e "show databases;"|egrep -vi "database|infor|perfor")"

for dbname in $DATABASE

do

      MYDIR=/mysqlbak/$dbname

      [ ! -d $MYDIR ] && mkdir -p $MYDIR

      $MYDUMP $dbname|gzip > $MYDIR/${dbname}_$(date +%F).sql.gz

      for tbname in `$MYLOGIN -e "show tables from $dbname;"|sed '1d'`

      do

            $MYDUMP2 $dbname $tbname|gzip >$MYDIR/${dbname}_${tbname}_$(date +%F).sql.gz

      done

done

恢復資料

#mysql -uroot -p123456 -e "use test;drop table te;"

#mysql -uroot -p123456 test < /test_bak.sql

檢視mysql連線

兩次show之後, 發現還有語句在呆著, 說明有慢查詢, 可以用 show full processlist 來檢視完整的sql語句, 注意檢視 sleep / lock 是否過多

#mysql -uroot -p123456 -e "show processlist;"

檢視mysql狀態: 加上global表示整個資料庫, 否則表示當前會話

#mysql -uroot -p123456 -e "show global status;"

不重啟修改mysql引數

mysql> set global key_buffer_size=1024*1024*32;

mysql> show variables like 'key_buffer%';

mysql批量插入測試資料

一、建表語句

use test;

create table student(

Sno int(10) NOT NULL COMMENT '學號',

Sname varchar(16) NOT NULL COMMENT '姓名',

Ssex char(2) NOT NULL COMMENT '性別',

Sage tinyint(2)  NOT NULL default '0' COMMENT '學生年齡',

Sdept varchar(16)  default NULL  COMMENT '學生所在系別',

PRIMARY KEY  (Sno)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

二、批量插入資料指令碼

#!/bin/bash

MysqlLogin="mysql -uroot -p123456"

i=1

while true

do

      ${MysqlLogin} -e "insert into test.student values ("$i",'oldboy"$i"','m','21','computer"$i"');"

      ((i++))

      sleep 1;

done

mysqlbinlog(增量恢復)

# vi /etc/my.cnf

log-bin=binlog_file   //去掉註釋

# /etc/init.d/mysqld restart

mysql> insert into ****** #插入測試資料

cd /usr/local/mysql/data/

mysqlbinlog  binlog_file.000001 #檢視檔案內容

cp binlog_file* /bak/mysql/

mysqlbinlog /bak/mysql/binlog_file.000004 --start-date="2010-09-29 18:00:00" --stop-date="2010-09-29 23:00:00" -r time.sql

mysqlbinlog /bak/mysql/binlog_file.000004 --start-position=370 --stop-position=440 -r pos.sql

mysqlbinlog /bak/mysql/binlog_file.000004 -d test -r test.sql

mysqlbinlog /bak/mysql/binlog_file.000004 -h 192.1681.102 -r 102.sql

mysqlbinlog /bak/mysql/binlog_file.000004 -p 3306 -r 3306.sql

mysqlbinlog /bak/mysql/binlog_file.000004 --server-id=1 -r s1.sql

以上6個條件可以排列組合, 作為恢復資料的條件

binlog的檔案內容, 示例:

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;

/*!40019 SET @@session.max_insert_delayed_threads=0*/;

/*!50003 SET @[email protected]@COMPLETION_TYPE,COMPLETION_TYPE=0*/;

DELIMITER /*!*/;

# at 4

#160712 20:00:27 server id 1  end_log_pos 107   Start: binlog v 4, server v 5.5.32-log created 160712 20:00:27 at startup

# Warning: this binlog is either in use or was not closed properly.

ROLLBACK/*!*/;

BINLOG '

y66FVw8BAAAAZwAAAGsAAAABAAQANS41LjMyLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAADLroVXEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==

'/*!*/;

# at 107

#160712 20:02:51 server id 1  end_log_pos 351   Query   thread_id=1     exec_time=0    error_code=0

use `test`/*!*/;

SET TIMESTAMP=1468378971/*!*/;

SET @@session.pseudo_thread_id=1/*!*/;

SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;

SET @@session.sql_mode=0/*!*/;

SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;

/*!\C utf8 *//*!*/;

SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;

SET @@session.lc_time_names=0/*!*/;

SET @@session.collation_database=DEFAULT/*!*/;

CREATE TABLE `te` (

`id`  int(4) NOT NULL AUTO_INCREMENT ,

`a` char(5) NOT NULL,

`b` char(5) NOT NULL,

`c` char(5) NOT NULL,

PRIMARY KEY (`id`),

KEY `index_a_b_c` (`a`(3),`b`,`c`)

)

/*!*/;

# at 351

#160712 20:03:43 server id 1  end_log_pos 419   Query   thread_id=1     exec_time=0    error_code=0

SET TIMESTAMP=1468379023/*!*/;

BEGIN

/*!*/;

# at 419

#160712 20:03:43 server id 1  end_log_pos 524   Query   thread_id=1     exec_time=0    error_code=0

SET TIMESTAMP=1468379023/*!*/;

insert into te values(1,'aaa','bbb','ccc')

/*!*/;

# at 524

#160712 20:03:43 server id 1  end_log_pos 551   Xid = 14

COMMIT/*!*/;

DELIMITER ;

# End of log file

ROLLBACK /* added by mysqlbinlog */;

/*!50003 SET [email protected]_COMPLETION_TYPE*/;

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

相關推薦

mysql系列5.mysql備份恢復

備份資料: mysqldump #mysqldump -uroot -p123456 test > /test_bak.sql #egrep -v "#|\*|--|^$" /test_bak.sql 指定對應字符集 #mysqldump -uroot -p1234

mysql系列5--完全備份和增量備份

bsp 定時 實時 sta form sql -a posit 密碼 一、利用系統自帶的工具實現完全備份:mysqldump1、備份所有的數據庫: mysqldump -hlocalhost -uroot -p12345678 --all-database

mysql系列6--------使用第三方工具-percona來備份mysql恢復

文件目錄 restart form rpm 導入 完全備份 mys 只需要 schema 使用第三方工具來備份mysql-----percona一、前期準備工作: 1、安裝依賴包:yum -y install perl-Digest-MD5 perl-DBD-

mysql系列2------數據類型,索引,鍵,存儲引擎

事務 年份 自動 create default timestamp cas 長度 刪除 一、Mysql數據類型: 1、數值類型: 整數類型:使用unsigned修飾時,只取正值,數值不夠指定寬度時,在左邊補空格 整

mysql系列3----數據導入導出,管理表,查詢

搜索系統 記錄 user pri 分隔符 nat 配置 _id 權限 一、數據導入與導出 1、搜索系統的目錄:show variables like "secure_file_priv" //如果顯示為空的話,可以去配置文件裏面設置路徑,

mysql系列4----密碼管理、授權、圖形化管理

erl column option process 生成 自己 服務 auth 存儲 一、mysql密碼破解 1、在shell命令行下修改密碼 mysqladmin -hlocalhost -uroot -p password "1234

mysql系列7----主從的設置

日誌類型 令行 mysql主從 程序 使用 關於 info ssl cati 一、mysql主從同步(為後面實現讀寫分離,MMM高可用集群做基礎) 主庫配置:主庫的IP地址:192.168.4.111 1、首先給用戶授權,用來實現同步時,從庫連接主庫的用戶名: g

mysql系列9--------mmm高可用集群

相互 tin lin 高可用集群 配置文件說明 -s 查看ip 用戶 mysql mmm高可用集群介紹: 高可用集群介紹:主備模式,當主不能提供服務的時候備用主機接替它提供服務。這個過程對於客戶端是透明的。一、前期準備工作 1、準備五臺linux服務器:主(192.

編程路:MySql系列多表查詢

所有 連接 進行 查看 bsp 關鍵字 right emp 字段 多表連接查詢 #重點:外鏈接語法 SELECT 字段列表 FROM 表1 INNER|LEFT|RIGHT JOIN 表2 ON 表1.字段 = 表2.字段; 交叉連接:不適用任何匹配條

MySQL系列二四種隔離級別及加鎖

死鎖 開啟 serial 串行化 工作 保存 city innodb sele 事務 1、定義:所有操作必須成功完成,否則在每個操作中所作的所有更改都會備撤銷。 2、事務的ACID 原子性atomicity 一致性consistency 隔離性isola

多實例:MySQL系列

所在 之間 file pri 指定 lar mysql mysqld amp MySQL的多實例配置 ? 在一臺物理機中需要多個測試環境,那麽就需要用到了搭建數據庫的多個實例,多個實例的意思就是運行多份程序,實例與實例之間沒有影響。要註意監聽的端口需要不同。 環境:Cen

MySQL的高可用實現:MySQL系列十四

一致性 ilo ply purge shutdown monitor 半同步 eve 延遲 MySQL的高可以有三種實現方式:多主模式(Multi Master MySQL),MHA(Master High Availability)和 Galera Cluster:wr

MySQL常用配置和性能壓力測試:MySQL系列十五

text imu reat ini -o blocks debug 生成 存在 一、MySQL常用配置 以下所有配置參數以32G內存的服務器為基 1、打開獨立的表空間 innodb_file_per_table = 1 2、MySQL服務所允許的同時會話數的上限,默認為

Flink讀寫系列-讀mysql並寫入mysql

在Flink文件中,提供connector讀取源資料和把處理結果儲存到外部系統中。但是沒有提供資料庫的connector,如果要讀寫資料庫,官網給出了非同步IO(Asynchronous I/O)專門用於訪問外部資料,詳細可看: 還有一種方法是繼承RichSourceF

MySQL系列八:中介軟體

360 Atlas 較為活躍,Atlas 是由 360 Web平臺部基礎架構團隊開發維護的一個基於 MySQL 協議的資料中間層專案。它是在mysql-proxy 0.8.2版本的基礎上,對其進行了優化,增加了一些新的功能特性。360內部使用 Atla

Linux系列安裝MySQL

環境:CentOS 7以上 在CentOS中預設安裝有MariaDB,但是我們需要的是MySQL,安裝MySQL可以覆蓋MariaDB MariaDB資料庫管理系統是MySQL的一個分支,主要由開源社群在維護,採用GPL授權許可。開發這個分支的原因之一是:甲骨文公

mysql主從複製及資料備份恢復

1、主從伺服器分別作以下操作: 1.1、版本一致 1.2、初始化表,並在後臺啟動mysql 1.3、修改root的密碼 2、修改主伺服器master: #vi /etc/my.cnf [mysqld

RMAN備份恢復系列redo日誌檔案恢復

實驗環境 作業系統 Redhat5.4 x86 資料庫版本 oracle 11gR2 (11.2.0.1.0) 實驗前已經做了RMAN全量備份包括controlfile、spfile 實驗模擬 1. INACTIVE日誌組部分member成員損

SQL注入系列PHP+Mysql手動注入(一)----數字型

1.常見的幾種SQL注入 1.數字型 2.字元型 3.文字型 4.搜尋型(POST/GET) 5.cookie注入 6.SQL盲注 7.編碼注入 8.寬位元組注入 2.測試原始碼 頁面原

MySQL資料庫xtrabackup物理備份(一)

前言:說到資料庫備份,我們知道可以用來對資料庫進行備份的工具有mysqldump、mydumer、mysqlpump等等,實際工作中,機器上的資料庫不大的話,都是用mysqldump工具來備份,這些備份工具各有優缺點,這裡不詳細介紹,今天分享另一個數據庫備份工具,叫XtraBackup。一、Xtrabacku