create view 視圖名稱 as sql 查詢語句
select * from 視圖名稱;
alter view 視圖名稱 AS SQL語句
drop view ren_view;
create trigger triggerName after/before insert/update/delete on 表名 for each row #這句話是固定的 begin #須要執行的sql語句 end 注意1:after/before: 只能選一個 ,after 表示 後置觸發, before 表示前置觸發 注意2:insert/update/delete:只能選一個
#商品表 create table goods( id int primary key auto_increment, name varchar(20), num int ); #訂單表 create table order_table( oid int primary key auto_increment, gid int, much int );
insert into goods(name,num) values('商品1',10),('商品2',10),('商品3',10);
insert into order_table(gid,much) values(1,3);
- 2 更新商品表商品1的剩餘數量
update goods set num=num-3 where id=1;
create trigger tg1 after insert on order_table for each row begin update goods set num = num -3 where id = 1; end
insert into order_table(gid,much) values(1,3);
insert into order_table(gid,much) values(2,3);
create trigger tg2 after insert on order_table for each row begin update goods set num = num-new.much where id = new.gid; end
drop trigger tg1;
insert into order_table(gid,much) values(2,3)
執行完發現商品2的數量變爲7了,如今就對了。html
那咱們的觸發器就該這樣寫:前端
create trigger tg3 afert delete on order_table for each row bigen update goods set num = num + old.much where id = old.gid;-- (注意這邊的變化) end
create trigger tg4 after update on order_table for each row begin update goods set num = num+old.much-new.much where id = old.gid; end
存儲過程:相似於函數(方法),簡單的說存儲過程是爲了完成某個數據庫中的特定功能而編寫的語句集合,該語句集包括SQL語句(對數據的增刪改查)、條件語句和循環語句等。node
1 查看現有的存儲過程mysql
show procedure status;
drop procedure 存儲過程名稱;
call 存儲過程名稱(參數入/出類型 參數名 數據類型);
4 建立存儲過程linux
體會封裝sql
#1.體會封裝 create procedure p1 () begin select * from account; end
create procedure p2(in i int,out n varchar(50)) begin select name into n from account where id = i; end -- 調用 set @name =null; CALL p2(1,@name); select @name;
注意2: into 關鍵字 能夠 將前面字段的查詢結果 執行 給 into 後面的變量.shell
in入參示例數據庫
-- 建立存儲過程 in 入參 create procedure p_in (IN num int ) begin select num; set num=100; select num; end; -- 調用 set @num=1; call p_in(@num); select @num; -- 總結: IN 參數只是將變量在存儲過程內部作了修改,並無影響到外部,@num仍爲1。
-- 建立存儲過程 out 出參 create procedure p_out (out num int ) begin select num; set num=100; select num; end; -- 調用 set @num=1; call p_out(@num); select @num;
-- 建立存儲過程 inout 出入參 create procedure p_inout (inout num int ) begin select num; set num=100; select num; end; -- 調用 set @num=1; call p_inout(@num); select @num;
#3.SQL 體會控制 create procedure p3(in x int,in c char(1)) begin if c ='d' then select * from account where money >x; else select * from account where money <x; end if; end
#4.體會循環:計算1-100累加的和,而且返回計算結果. create procedure p4(inout n int) begin DECLARE sum int default 0; -- 設置總和變量,而且指定初始值0 declare i int; -- 聲明變量 set i = 0; -- 經過set爲變量設置值 while i<=n DO -- 開始循環 set sum = sum +i; set i = i+1; end while; -- 結束循環 select sum; -- 提供結果 set n = sum;--將計算結果提供給 輸出變量 n; end; -- 調用: set @n = 100; call p4(@n); select @n;
1、數學函數 ROUND(x,y) 返回參數x的四捨五入的有y位小數的值 RAND() 返回0到1內的隨機值,能夠經過提供一個參數(種子)使RAND()隨機數生成器生成一個指定的值。 2、聚合函數(經常使用於GROUP BY從句的SELECT查詢中) AVG(col)返回指定列的平均值 COUNT(col)返回指定列中非NULL值的個數 MIN(col)返回指定列的最小值 MAX(col)返回指定列的最大值 SUM(col)返回指定列的全部值之和 GROUP_CONCAT(col) 返回由屬於一組的列值鏈接組合而成的結果 3、字符串函數 CHAR_LENGTH(str) 返回值爲字符串str 的長度,長度的單位爲字符。一個多字節字符算做一個單字符。 CONCAT(str1,str2,...) 字符串拼接 若有任何一個參數爲NULL ,則返回值爲 NULL。 CONCAT_WS(separator,str1,str2,...) 字符串拼接(自定義鏈接符) CONCAT_WS()不會忽略任何空字符串。 (然而會忽略全部的 NULL)。 FORMAT(X,D) 將數字X 的格式寫爲'#,###,###.##',以四捨五入的方式保留小數點後 D 位, 並將結果以字符串的形式返回。若 D 爲 0, 則返回結果不帶有小數點,或不含小數部分。 例如: SELECT FORMAT(12332.1,4); 結果爲: '12,332.1000' INSERT(str,pos,len,newstr) 在str的指定位置插入字符串 pos:要替換位置其實位置 len:替換的長度 newstr:新字符串 例如: SELECT INSERT('abcd',1,2,'tt'); 結果爲: 'ttcd' SELECT INSERT('abcd',1,4,'tt'); 結果爲: 'tt' 特別的: 若是pos超過原字符串長度,則返回原字符串 若是len超過原字符串長度,則由新字符串徹底替換 INSTR(str,substr) 返回字符串 str 中子字符串的第一個出現位置。 LEFT(str,len) 返回字符串str 從開始的len位置的子序列字符。 例如: SELECT INSTR('abc','c'); 結果爲: 3 SELECT INSTR('abc','d'); 結果爲: 0 LOWER(str) 變小寫 UPPER(str) 變大寫 REVERSE(str) 返回字符串 str ,順序和字符順序相反。 例如: SELECT REVERSE('1234567') 結果爲:7654321 SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos FOR len) 不帶有len 參數的格式從字符串str返回一個子字符串,起始於位置 pos。帶有len參數的格式從字符串str返回一個長度同len字符相同的子字符串,起始於位置 pos。 使用 FROM的格式爲標準 SQL 語法。也可能對pos使用一個負值。倘若這樣,則子字符串的位置起始於字符串結尾的pos 字符,而不是字符串的開頭位置。在如下格式的函數中能夠對pos 使用一個負值。 mysql> SELECT SUBSTRING('Quadratically',5); -- 從第5位開始截取 -> 'ratically' mysql> SELECT SUBSTRING('foobarbar' FROM 4); -- 從第4位開始截取 -> 'barbar' mysql> SELECT SUBSTRING('Quadratically',5,6); --從第5位開始截取,截取6個長度 -> 'ratica' mysql> SELECT SUBSTRING('Sakila', -3); -- 從倒數第3位開始截取 -> 'ila' mysql> SELECT SUBSTRING('Sakila', -5, 3); -- 從倒數第5位開始截取,截取3個長度 -> 'aki' 4、日期和時間函數 CURDATE()或CURRENT_DATE() 返回當前的日期 CURTIME()或CURRENT_TIME() 返回當前的時間 DAYOFWEEK(date) 返回date所表明的一星期中的第幾天(1~7) DAYOFMONTH(date) 返回date是一個月的第幾天(1~31) DAYOFYEAR(date) 返回date是一年的第幾天(1~366) DAYNAME(date) 返回date的星期名,如:SELECT DAYNAME(CURRENT_DATE); FROM_UNIXTIME(ts,fmt) 根據指定的fmt格式,格式化UNIX時間戳ts HOUR(time) 返回time的小時值(0~23) MINUTE(time) 返回time的分鐘值(0~59) MONTH(date) 返回date的月份值(1~12) MONTHNAME(date) 返回date的月份名,如:SELECT MONTHNAME(CURRENT_DATE); NOW() 返回當前的日期和時間 QUARTER(date) 返回date在一年中的季度(1~4),如SELECT QUARTER(CURRENT_DATE); WEEK(date) 返回日期date爲一年中第幾周(0~53) YEAR(date) 返回日期date的年份(1000~9999) 重點: DATE_FORMAT(date,format) 根據format字符串格式化date值 mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y'); -> 'Sunday October 2009' mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s'); -> '22:23:00' mysql> SELECT DATE_FORMAT('1900-10-04 22:23:00', -> '%D %y %a %d %m %b %j'); -> '4th 00 Thu 04 10 Oct 277' mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', -> '%H %k %I %r %T %S %w'); -> '22 22 10 10:23:00 PM 22:23:00 00 6' mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V'); -> '1998 52' mysql> SELECT DATE_FORMAT('2006-06-00', '%d'); -> '00' 5、加密函數 MD5() 計算字符串str的MD5校驗和 例如: SELECT MD5('1234') 結果爲:81dc9bdb52d04dc20036dbd8313ed055 PASSWORD(str) 返回字符串str的加密版本,這個加密過程是不可逆轉的 例如: SELECT PASSWORD('1234') 結果爲:*A4B6157319038724E3560894F7F932C8886EBFCF 6、控制流函數 CASE WHEN[test1] THEN [result1]...ELSE [default] END 若是testN是真,則返回resultN,不然返回default CASE [test] WHEN[val1] THEN [result]...ELSE [default]END 若是test和valN相等,則返回resultN,不然返回default IF(test,t,f) 若是test是真,返回t;不然返回f IFNULL(arg1,arg2) 若是arg1不是空,返回arg1,不然返回arg2 例如: SELECT IFNULL('bbb','abc'); 結果爲: bbb SELECT IFNULL(null,'abc'); 結果爲: abc NULLIF(arg1,arg2) 若是arg1=arg2返回NULL;不然返回arg1 例如: SELECT NULLIF('bbb','bbb');結果爲: null SELECT NULLIF('aaa','bbb');結果爲: aaa
更多內置函數:https://dev.mysql.com/doc/refman/5.7/en/functions.htmlvim
1 自定義函數windows
CREATE FUNCTION fun1(i1 int,i2 int) RETURNS INT //設置返回類型 BEGIN DECLARE sum int default 0; set sum = i1+i2; RETURN(sum); //返回結果 end
#直接調用自定義函數 select fun1(1,5); #在sql語句中使用自定義函數 select fun1(參數1,參數2),name from 表名
DROP FUNCTION fun_name;
函數 | 過程 |
---|---|
通常用於計算數據 | 完成特定的任務 |
聲明爲FUNCTION | 聲明爲PROCEDURE |
須要描述類型,且PL/SQL 塊中至少有一個有效的 RETURN 語句 | 無返回類型,可經過OUT、IN OUT 參數返回多個值 |
不能獨立運行,必須做爲表達式一部分 | 可做爲一個獨立的 PL/SQL 語句運行 |
在 DML和DQL中可調用函數 | 在DML和DQL中不可調用過程 |
create table account( id int(50) not null auto_increment primary key, name VARCHAR(50) not null, money DOUBLE(10,2) not NULL );
insert into account (id,name,money) values(1,'魯班',250),(2,'后羿',5000);
start transaction; -- 開啓事物 -- 執行sql語句操做 update account set money = money - 500 where id =1; update account set money = money+500 where id = 2; commit; -- 手動提交事物 rollback; -- 回滾事物 -- 查看結果 select * from account;
START TRANSACTION ; insert into account (name,money) values('李元芳',1000); SAVEPOINT s1; -- 設置保存點 insert into account (name,money) values('張桂枝',1500); ROLLBACK to s1; -- 事物回滾到保存點<br>COMMIT; --提交事物
-- 窗口1 用戶進行充值 -- 充值前 先查看餘額 set @m=0; SELECT money into @m from account where id = 1; select @m; -- 看到餘額後 充值100 塊 update account set money = @m + 100 where id = 1; SELECT * from account; -------------------------------------------------------------- -- 窗口2 用戶進行取款 -- 取款前 先查看餘額 set @m=0; SELECT money into @m from account where id = 1; select @m; -- 看到餘額後 取款100 塊 update account set money = @m - 100 where id = 1; SELECT * from account;
-- 0.開始事務 start transaction; -- 1.查詢帳戶餘額 set @m = 0; -- 帳戶餘額 select money into @m from account where id = 1 for update; select @m; -- 2.修改帳戶餘額 update account set money = @m -100 where id = 1; select * FROM account where id = 1; -- 3. 提交事務 commit;
-- 0.開始事務 start transaction; -- 1.查詢帳戶餘額 set @m = 0; -- 帳戶餘額 select money into @m from account where id = 1 for update; select @m; -- 2.修改帳戶餘額 update account set money = @m +100 where id = 1; select * FROM account where id = 1; -- 3. 提交事務 commit;
注意2: 悲觀鎖的確保了數據的安全性,在數據被操做的時候鎖定數據不被訪問,可是這樣會帶來很大的性能問題。所以悲觀鎖在實際開發中使用是相對比較少的。
-- 1.查詢帳戶餘額 set @m = 0; -- 帳戶餘額 select money into @m from account where id = 1 ; select @m; -- 2.查詢版本號 set @version = 0; -- 版本號 select version into @version from account where id = 1 ; select @version; -- 3.修改帳戶餘額 update account set money = @m -100,version=version+1 where id = 1 and version = @version; select * FROM account where id = 1;
- 2 樂觀鎖定的第二種實現方式和第一種差很少,一樣是在須要樂觀鎖控制的table中增長一個字段,名稱無所謂,字段類型使用時間戳 (datatime), 和上面的version相似,也是在更新提交的時候檢查當前數據庫中數據的時間戳和本身更新前取到的時間戳進行對比,若是一致則OK,不然就是版本衝突。
mysql> SHOW DATABASES; #查看當前的數據庫, 咱們的數據庫爲employees +--------------------+ | Database | +--------------------+ | information_schema | | employees | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec) mysql> USE employees; Database changed mysql> SHOW TABLES; #查看當前庫中的表 +---------------------+ | Tables_in_employees | +---------------------+ | departments | | dept_emp | | dept_manager | | employees | | salaries | | titles | +---------------------+ 6 rows in set (0.00 sec) mysql> SELECT COUNT(*) FROM employees; #因爲篇幅緣由, 咱們這裏只看一下employees的行數爲300024 +----------+ | COUNT(*) | +----------+ | 300024 | +----------+ 1 row in set (0.05 sec)
mysql> FLUSH TABLES WITH READ LOCK; #向全部表施加讀鎖 Query OK, 0 rows affected (0.00 sec)
[root@node1 ~]# mkdir /backup #建立文件夾存放備份數據庫文件 [root@node1 ~]# cp -a /var/lib/mysql/* /backup #保留權限的拷貝源數據文件 [root@node1 ~]# ls /backup #查看目錄下的文件 employees ibdata1 ib_logfile0 ib_logfile1 mysql mysql.sock test
[root@node1 ~]# rm -rf /var/lib/mysql/* #刪除數據庫的全部文件 [root@node1 ~]# service mysqld restart #重啓MySQL, 若是是編譯安裝的應該不能啓動, 若是rpm安裝則會從新初始化數據庫 mysql> SHOW DATABASES; #由於咱們是rpm安裝的, 鏈接到MySQL進行查看, 發現數據丟失了! +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | +--------------------+ 3 rows in set (0.00 sec) [root@node1 ~]# rm -rf /var/lib/mysql/* #這一步能夠不作 [root@node1 ~]# cp -a /backup/* /var/lib/mysql/ #將備份的數據文件拷貝回去 [root@node1 ~]# service mysqld restart #重啓MySQL #從新鏈接數據並查看 mysql> SHOW DATABASES; #數據庫已恢復 +--------------------+ | Database | +--------------------+ | information_schema | | employees | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec) mysql> USE employees; mysql> SELECT COUNT(*) FROM employees; #表的行數沒有變化 +----------+ | COUNT(*) | +----------+ | 300024 | +----------+ 1 row in set (0.06 sec) ##完成
#基本語法格式 shell> mysqldump [options] db_name [tbl_name ...] 恢復須要手動CRATE DATABASES shell> mysqldump [options] --databases db_name ... 恢復不須要手動建立數據庫 shell> mysqldump [options] --all-databases 恢復不須要手動建立數據庫 其餘選項: -E, --events: 備份事件調度器 -R, --routines: 備份存儲過程和存儲函數 --triggers: 備份表的觸發器; --skip-triggers --master-date[=value] 1: 記錄爲CHANGE MASTER TO 語句、語句不被註釋 2: 記錄爲註釋的CHANGE MASTER TO語句 基於二進制還原只能全庫還原 --flush-logs: 日誌滾動 鎖定表完成後執行日誌滾動
mysql> SHOW DATABASES; #查看當前的數據庫, 咱們的數據庫爲employees +--------------------+ | Database | +--------------------+ | information_schema | | employees | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec) mysql> USE employees; Database changed mysql> SHOW TABLES; #查看當前庫中的表 +---------------------+ | Tables_in_employees | +---------------------+ | departments | | dept_emp | | dept_manager | | employees | | salaries | | titles | +---------------------+ 6 rows in set (0.00 sec) mysql> SELECT COUNT(*) FROM employees; #因爲篇幅緣由, 咱們這裏只看一下employees的行數爲300024 +----------+ | COUNT(*) | +----------+ | 300024 | +----------+ 1 row in set (0.05 sec)
[root@node1 ~]# mysql -uroot -p -e 'SHOW MASTER STATUS' #查看當前二進制文件的狀態, 並記錄下position的數字 +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 106 | | | +------------------+----------+--------------+------------------+ [root@node1 ~]# mysqldump --all-databases --lock-all-tables > backup.sql #備份數據庫到backup.sql文件中 mysql> CREATE DATABASE TEST1; #建立一個數據庫 Query OK, 1 row affected (0.00 sec) mysql> SHOW MASTER STATUS; #記下如今的position +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 191 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) [root@node1 ~]# cp /var/lib/mysql/mysql-bin.000003 /root #備份二進制文件 [root@node1 ~]# service mysqld stop #中止MySQL [root@node1 ~]# rm -rf /var/lib/mysql/* #刪除全部的數據文件 [root@node1 ~]# service mysqld start #啓動MySQL, 若是是編譯安裝的應該不能啓動(需從新初始化), 若是rpm安裝則會從新初始化數據庫 mysql> SHOW DATABASES; #查看數據庫, 數據丟失! +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | +--------------------+ 3 rows in set (0.00 sec) mysql> SET sql_log_bin=OFF; #暫時先將二進制日誌關閉 Query OK, 0 rows affected (0.00 sec) mysql> source backup.sql #恢復數據,所需時間根據數據庫時間大小而定 mysql> SET sql_log_bin=ON; 開啓二進制日誌 mysql> SHOW DATABASES; #數據庫恢復, 可是缺乏TEST1 +--------------------+ | Database | +--------------------+ | information_schema | | employees | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec) [root@node1 ~]# mysqlbinlog --start-position=106 --stop-position=191 mysql-bin.000003 | mysql employees #經過二進制日誌增量恢復數據 mysql> SHOW DATABASES; #如今TEST1出現了! +--------------------+ | Database | +--------------------+ | information_schema | | TEST1 | | employees | | mysql | | test | +--------------------+ 5 rows in set (0.00 sec) #完成
添加硬盤; 這裏咱們直接實現SCSI硬盤的熱插拔, 首先在虛擬機中添加一塊硬盤, 不重啓 [root@node1 ~]# ls /dev/sd* #只有如下幾塊硬盤, 可是咱們不重啓可讓系統識別新添加的硬盤 /dev/sda /dev/sda1 /dev/sda2 [root@node1 ~]# echo '- - -' > /sys/class/scsi_host/host0/scan [root@node1 ~]# echo '- - -' > /sys/class/scsi_host/host1/scan [root@node1 ~]# echo '- - -' > /sys/class/scsi_host/host2/scan [root@node1 ~]# ls /dev/sd* #看!sdb識別出來了 /dev/sda /dev/sda1 /dev/sda2 /dev/sdb [root@node1 ~]# fdisk /dev/sdb #分區 Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0xd353d192. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +15G Command (m for help): t Selected partition 1 Hex code (type L to list codes): 8e Changed system type of partition 1 to 8e (Linux LVM) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. You have new mail in /var/spool/mail/root [root@node1 ~]# partx -a /dev/sdb BLKPG: Device or resource busy error adding partition 1 ##建立邏輯卷 [root@node1 ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created [root@node1 ~]# vgcreate myvg /dev/sdb1 Volume group "myvg" successfully created [root@node1 ~]# lvcreate -n mydata -L 5G myvg Logical volume "mydata" created. [root@node1 ~]# mkfs.ext4 /dev/mapper/myvg-mydata #格式化 [root@node1 ~]# mkdir /lvm_data [root@node1 ~]# mount /dev/mapper/myvg-mydata /lvm_data #掛載到/lvm_data [root@node1 ~]# vim /etc/my.cnf #修改mysql配置文件的datadir以下 datadir=/lvm_data [root@node1 ~]# service mysqld restart #重啓MySQL ####從新導入employees數據庫########略過####
mysql> SHOW DATABASES; #查看當前的數據庫, 咱們的數據庫爲employees +--------------------+ | Database | +--------------------+ | information_schema | | employees | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec) mysql> USE employees; Database changed mysql> SHOW TABLES; #查看當前庫中的表 +---------------------+ | Tables_in_employees | +---------------------+ | departments | | dept_emp | | dept_manager | | employees | | salaries | | titles | +---------------------+ 6 rows in set (0.00 sec) mysql> SELECT COUNT(*) FROM employees; #因爲篇幅緣由, 咱們這裏只看一下employees的行數爲300024 +----------+ | COUNT(*) | +----------+ | 300024 | +----------+ 1 row in set (0.05 sec)
mysql> FLUSH TABLES WITH READ LOCK; #鎖定全部表 Query OK, 0 rows affected (0.00 sec) [root@node1 lvm_data]# lvcreate -L 1G -n mydata-snap -p r -s /dev/mapper/myvg-mydata #建立快照卷 Logical volume "mydata-snap" created. mysql> UNLOCK TABLES; #解鎖全部表 Query OK, 0 rows affected (0.00 sec) [root@node1 lvm_data]# mkdir /lvm_snap #建立文件夾 [root@node1 lvm_data]# mount /dev/myvg/mydata-snap /lvm_snap/ #掛載snap mount: block device /dev/mapper/myvg-mydata--snap is write-protected, mounting read-only [root@node1 lvm_data]# cd /lvm_snap/ [root@node1 lvm_snap]# ls employees ibdata1 ib_logfile0 ib_logfile1 mysql mysql-bin.000001 mysql-bin.000002 mysql-bin.000003 mysql-bin.index test [root@node1 lvm_snap]# tar cf /tmp/mysqlback.tar * #打包文件到/tmp/mysqlback.tar [root@node1 ~]# umount /lvm_snap/ #卸載snap [root@node1 ~]# lvremove myvg mydata-snap #刪除snap
[root@node1 lvm_snap]# rm -rf /lvm_data/* [root@node1 ~]# service mysqld start #啓動MySQL, 若是是編譯安裝的應該不能啓動(需從新初始化), 若是rpm安裝則會從新初始化數據庫 mysql> SHOW DATABASES; #查看數據庫, 數據丟失! +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | +--------------------+ 3 rows in set (0.00 sec) [root@node1 ~]# cd /lvm_data/ [root@node1 lvm_data]# rm -rf * #刪除全部文件 [root@node1 lvm_data]# tar xf /tmp/mysqlback.tar #解壓備份數據庫到此文件夾 [root@node1 lvm_data]# ls #查看當前的文件 employees ibdata1 ib_logfile0 ib_logfile1 mysql mysql-bin.000001 mysql-bin.000002 mysql-bin.000003 mysql-bin.index test mysql> SHOW DATABASES; #數據恢復了 +--------------------+ | Database | +--------------------+ | information_schema | | employees | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec) ##完成
咱們這裏經過wget percona官方的rpm包進行安裝 [root@node1 ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.4/binary/redhat/6/x86_64/percona-xtrabackup-2.3.4-1.el6.x86_64.rpm [root@node1 ~]# yum localinstall percona-xtrabackup-2.3.4-1.el6.x86_64.rpm #須要EPEL源
[root@node1 ~]# mkdir /extrabackup #建立備份目錄 [root@node1 ~]# innobackupex --user=root /extrabackup/ #備份數據 ###################提示complete表示成功********************* [root@node1 ~]# ls /extrabackup/ #看到備份目錄 2016-04-27_07-30-48
[root@node1 ~]# innobackupex --apply-log /extrabackup/2016-04-27_07-30-48/ #指定備份文件的目錄 #通常狀況下下面三行結尾表明成功***************** InnoDB: Starting shutdown... InnoDB: Shutdown completed; log sequence number 369661462 160427 07:40:11 completed OK! [root@node1 ~]# cd /extrabackup/2016-04-27_07-30-48/ [root@node1 2016-04-27_07-30-48]# ls -hl #查看備份文件 total 31M -rw-r----- 1 root root 386 Apr 27 07:30 backup-my.cnf drwx------ 2 root root 4.0K Apr 27 07:30 employees -rw-r----- 1 root root 18M Apr 27 07:40 ibdata1 -rw-r--r-- 1 root root 5.0M Apr 27 07:40 ib_logfile0 -rw-r--r-- 1 root root 5.0M Apr 27 07:40 ib_logfile1 drwx------ 2 root root 4.0K Apr 27 07:30 mysql drwx------ 2 root root 4.0K Apr 27 07:30 performance_schema drwx------ 2 root root 4.0K Apr 27 07:30 test -rw-r----- 1 root root 27 Apr 27 07:30 xtrabackup_binlog_info -rw-r--r-- 1 root root 29 Apr 27 07:40 xtrabackup_binlog_pos_innodb -rw-r----- 1 root root 117 Apr 27 07:40 xtrabackup_checkpoints -rw-r----- 1 root root 470 Apr 27 07:30 xtrabackup_info -rw-r----- 1 root root 2.0M Apr 27 07:40 xtrabackup_logfile
[root@node1 ~]# rm -rf /data/* #刪除數據文件 ***不用啓動數據庫也能夠還原************* [root@node1 ~]# innobackupex --copy-back /extrabackup/2016-04-27_07-30-48/ #恢復數據, 記清使用方法 #########咱們這裏是編譯安裝的mariadb因此須要作一些操做########## [root@node1 data]# killall mysqld [root@node1 ~]# chown -R mysql:mysql ./* [root@node1 ~]# ll /data/ #數據恢復 total 28704 -rw-rw---- 1 mysql mysql 16384 Apr 27 07:43 aria_log.00000001 -rw-rw---- 1 mysql mysql 52 Apr 27 07:43 aria_log_control -rw-rw---- 1 mysql mysql 18874368 Apr 27 07:43 ibdata1 -rw-rw---- 1 mysql mysql 5242880 Apr 27 07:43 ib_logfile0 -rw-rw---- 1 mysql mysql 5242880 Apr 27 07:43 ib_logfile1 -rw-rw---- 1 mysql mysql 264 Apr 27 07:43 mysql-bin.000001 -rw-rw---- 1 mysql mysql 19 Apr 27 07:43 mysql-bin.index -rw-r----- 1 mysql mysql 2166 Apr 27 07:43 node1.anyisalin.com.err [root@node1 data]# service mysqld restart MySQL server PID file could not be found! [FAILED] Starting MySQL.. [ OK ] MariaDB [(none)]> SHOW DATABASES; #查看數據庫, 已經恢復 +--------------------+ | Database | +--------------------+ | information_schema | | employees | | mysql | | performance_schema | | test | +--------------------+ 5 rows in set (0.00 sec
#########建立連兩個數據庫以供測試##################### MariaDB [(none)]> CREATE DATABASE TEST1; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> CREATE DATABASE TEST2; Query OK, 1 row affected (0.00 sec) [root@node1 ~]# innobackupex --incremental /extrabackup/ --incremental-basedir=/extrabackup/2016-04-27_07-30-48/ [root@node1 ~]# ls /extrabackup/2016-04-27_07-57-22/ #查看備份文件 total 96 -rw-r----- 1 root root 386 Apr 27 07:57 backup-my.cnf drwx------ 2 root root 4096 Apr 27 07:57 employees -rw-r----- 1 root root 49152 Apr 27 07:57 ibdata1.delta -rw-r----- 1 root root 44 Apr 27 07:57 ibdata1.meta drwx------ 2 root root 4096 Apr 27 07:57 mysql drwx------ 2 root root 4096 Apr 27 07:57 performance_schema drwx------ 2 root root 4096 Apr 27 07:57 test drwx------ 2 root root 4096 Apr 27 07:57 TEST1 drwx------ 2 root root 4096 Apr 27 07:57 TEST2 -rw-r----- 1 root root 21 Apr 27 07:57 xtrabackup_binlog_info -rw-r----- 1 root root 123 Apr 27 07:57 xtrabackup_checkpoints -rw-r----- 1 root root 530 Apr 27 07:57 xtrabackup_info -rw-r----- 1 root root 2560 Apr 27 07:57 xtrabackup_logfile
[root@node1 ~]# innobackupex --apply-log --redo-only /extrabackup/2016-04-27_07-30-48/ [root@node1 ~]# innobackupex --apply-log --redo-only /extrabackup/2016-04-27_07-30-48/ --incremental-dir=/extrabackup/2016-04-27_07-5 7-22/
[root@node1 ~]# rm -rf /data/* #刪除數據 [root@node1 ~]# innobackupex --copy-back /extrabackup/2016-04-27_07-30-48/ #整理增量備份以後能夠直接經過全量備份還原 [root@node1 ~]# chown -R mysql.mysql /data/ [root@node1 ~]# ls /data/ -l total 28732 -rw-rw---- 1 mysql mysql 8192 Apr 27 08:05 aria_log.00000001 -rw-rw---- 1 mysql mysql 52 Apr 27 08:05 aria_log_control drwx------ 2 mysql mysql 4096 Apr 27 08:05 employees -rw-r----- 1 mysql mysql 18874368 Apr 27 08:05 ibdata1 -rw-r----- 1 mysql mysql 5242880 Apr 27 08:05 ib_logfile0 -rw-r----- 1 mysql mysql 5242880 Apr 27 08:05 ib_logfile1 drwx------ 2 mysql mysql 4096 Apr 27 08:05 mysql -rw-rw---- 1 mysql mysql 245 Apr 27 08:05 mysql-bin.000001 -rw-rw---- 1 mysql mysql 19 Apr 27 08:05 mysql-bin.index -rw-r----- 1 mysql mysql 1812 Apr 27 08:05 node1.anyisalin.com.err -rw-rw---- 1 mysql mysql 5 Apr 27 08:05 node1.anyisalin.com.pid drwx------ 2 mysql mysql 4096 Apr 27 08:05 performance_schema drwx------ 2 mysql mysql 4096 Apr 27 08:05 test drwx------ 2 mysql mysql 4096 Apr 27 08:05 TEST1 drwx------ 2 mysql mysql 4096 Apr 27 08:05 TEST2 -rw-r----- 1 mysql mysql 29 Apr 27 08:05 xtrabackup_binlog_pos_innodb -rw-r----- 1 mysql mysql 530 Apr 27 08:05 xtrabackup_info MariaDB [(none)]> SHOW DATABASES; #數據還原 +--------------------+ | Database | +--------------------+ | information_schema | | TEST1 | | TEST2 | | employees | | mysql | | performance_schema | | test | +--------------------+ 7 rows in set (0.00 sec) #關於xtrabackup還有不少強大的功能沒有敘述、有興趣能夠去看官方文檔
備份方法 | 備份速度 | 恢復速度 | 便捷性 | 功能 | 通常用於 |
---|---|---|---|---|---|
cp | 快 | 快 | 通常、靈活性低 | 很弱 | 少許數據備份 |
mysqldump | 慢 | 慢 | 通常、可無視存儲引擎的差別 | 通常 | 中小型數據量的備份 |
lvm2快照 | 快 | 快 | 通常、支持幾乎熱備、速度快 | 通常 | 中小型數據量的備份 |
xtrabackup | 較快 | 較快 | 實現innodb熱備、對存儲引擎有要求 | 強大 | 較大規模的備份 |
--all-databases , -A 導出所有數據庫。 mysqldump -uroot -p --all-databases --all-tablespaces , -Y 導出所有表空間。 mysqldump -uroot -p --all-databases --all-tablespaces --no-tablespaces , -y 不導出任何表空間信息。 mysqldump -uroot -p --all-databases --no-tablespaces --add-drop-database 每一個數據庫建立以前添加drop數據庫語句。 mysqldump -uroot -p --all-databases --add-drop-database --add-drop-table 每一個數據表建立以前添加drop數據表語句。(默認爲打開狀態,使用--skip-add-drop-table取消選項) mysqldump -uroot -p --all-databases (默認添加drop語句) mysqldump -uroot -p --all-databases –skip-add-drop-table (取消drop語句) --add-locks 在每一個表導出以前增長LOCK TABLES而且以後UNLOCK TABLE。(默認爲打開狀態,使用--skip-add-locks取消選項) mysqldump -uroot -p --all-databases (默認添加LOCK語句) mysqldump -uroot -p --all-databases –skip-add-locks (取消LOCK語句) --allow-keywords 容許建立是關鍵詞的列名字。這由表名前綴於每一個列名作到。 mysqldump -uroot -p --all-databases --allow-keywords --apply-slave-statements 在'CHANGE MASTER'前添加'STOP SLAVE',而且在導出的最後添加'START SLAVE'。 mysqldump -uroot -p --all-databases --apply-slave-statements --character-sets-dir 字符集文件的目錄 mysqldump -uroot -p --all-databases --character-sets-dir=/usr/local/mysql/share/mysql/charsets --comments 附加註釋信息。默認爲打開,能夠用--skip-comments取消 mysqldump -uroot -p --all-databases (默認記錄註釋) mysqldump -uroot -p --all-databases --skip-comments (取消註釋) --compatible 導出的數據將和其它數據庫或舊版本的MySQL 相兼容。值能夠爲ansi、mysql32三、mysql40、postgresql、oracle、mssql、db二、maxdb、no_key_options、no_tables_options、no_field_options等, 要使用幾個值,用逗號將它們隔開。它並不保證能徹底兼容,而是儘可能兼容。 mysqldump -uroot -p --all-databases --compatible=ansi --compact 導出更少的輸出信息(用於調試)。去掉註釋和頭尾等結構。可使用選項:--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys mysqldump -uroot -p --all-databases --compact --complete-insert, -c 使用完整的insert語句(包含列名稱)。這麼作能提升插入效率,可是可能會受到max_allowed_packet參數的影響而致使插入失敗。 mysqldump -uroot -p --all-databases --complete-insert --compress, -C 在客戶端和服務器之間啓用壓縮傳遞全部信息 mysqldump -uroot -p --all-databases --compress --create-options, -a 在CREATE TABLE語句中包括全部MySQL特性選項。(默認爲打開狀態) mysqldump -uroot -p --all-databases --databases, -B 導出幾個數據庫。參數後面全部名字參量都被看做數據庫名。 mysqldump -uroot -p --databases test mysql --debug 輸出debug信息,用於調試。默認值爲:d:t,/tmp/mysqldump.trace mysqldump -uroot -p --all-databases --debug mysqldump -uroot -p --all-databases --debug=」 d:t,/tmp/debug.trace」 --debug-check 檢查內存和打開文件使用說明並退出。 mysqldump -uroot -p --all-databases --debug-check --debug-info 輸出調試信息並退出 mysqldump -uroot -p --all-databases --debug-info --default-character-set 設置默認字符集,默認值爲utf8 mysqldump -uroot -p --all-databases --default-character-set=utf8 --delayed-insert 採用延時插入方式(INSERT DELAYED)導出數據 mysqldump -uroot -p --all-databases --delayed-insert --delete-master-logs master備份後刪除日誌. 這個參數將自動激活--master-data。 mysqldump -uroot -p --all-databases --delete-master-logs --disable-keys 對於每一個表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;語句引用INSERT語句。這樣能夠更快地導入dump出來的文件,由於它是在插入全部行後建立索引的。該選項只適合MyISAM表,默認爲打開狀態。 mysqldump -uroot -p --all-databases --dump-slave 該選項將主的binlog位置和文件名追加到導出數據的文件中(show slave status)。設置爲1時,將會以CHANGE MASTER命令輸出到數據文件;設置爲2時,會在change前加上註釋。該選項將會打開--lock-all-tables,除非--single-transaction被指定。該選項會自動關閉--lock-tables選項。默認值爲0。 mysqldump -uroot -p --all-databases --dump-slave=1 mysqldump -uroot -p --all-databases --dump-slave=2 --master-data 該選項將當前服務器的binlog的位置和文件名追加到輸出文件中(show master status)。若是爲1,將會輸出CHANGE MASTER 命令;若是爲2,輸出的CHANGE MASTER命令前添加註釋信息。該選項將打開--lock-all-tables 選項,除非--single-transaction也被指定(在這種狀況下,全局讀鎖在開始導出時得到很短的時間;其餘內容參考下面的--single-transaction選項)。該選項自動關閉--lock-tables選項。 mysqldump -uroot -p --host=localhost --all-databases --master-data=1; mysqldump -uroot -p --host=localhost --all-databases --master-data=2; --events, -E 導出事件。 mysqldump -uroot -p --all-databases --events --extended-insert, -e 使用具備多個VALUES列的INSERT語法。這樣使導出文件更小,並加速導入時的速度。默認爲打開狀態,使用--skip-extended-insert取消選項。 mysqldump -uroot -p --all-databases mysqldump -uroot -p --all-databases--skip-extended-insert (取消選項) --fields-terminated-by 導出文件中忽略給定字段。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項 mysqldump -uroot -p test test --tab=」/home/mysql」 --fields-terminated-by=」#」 --fields-enclosed-by 輸出文件中的各個字段用給定字符包裹。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項 mysqldump -uroot -p test test --tab=」/home/mysql」 --fields-enclosed-by=」#」 --fields-optionally-enclosed-by 輸出文件中的各個字段用給定字符選擇性包裹。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項 mysqldump -uroot -p test test --tab=」/home/mysql」 --fields-enclosed-by=」#」 --fields-optionally-enclosed-by =」#」 --fields-escaped-by 輸出文件中的各個字段忽略給定字符。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項 mysqldump -uroot -p mysql user --tab=」/home/mysql」 --fields-escaped-by=」#」 --flush-logs 開始導出以前刷新日誌。 請注意:假如一次導出多個數據庫(使用選項--databases或者--all-databases),將會逐個數據庫刷新日誌。除使用--lock-all-tables或者--master-data外。在這種狀況下,日誌將會被刷新一次,相應的因此表同時被鎖定。所以,若是打算同時導出和刷新日誌應該使用--lock-all-tables 或者--master-data 和--flush-logs。 mysqldump -uroot -p --all-databases --flush-logs --flush-privileges 在導出mysql數據庫以後,發出一條FLUSH PRIVILEGES 語句。爲了正確恢復,該選項應該用於導出mysql數據庫和依賴mysql數據庫數據的任什麼時候候。 mysqldump -uroot -p --all-databases --flush-privileges --force 在導出過程當中忽略出現的SQL錯誤。 mysqldump -uroot -p --all-databases --force --help 顯示幫助信息並退出。 mysqldump --help --hex-blob 使用十六進制格式導出二進制字符串字段。若是有二進制數據就必須使用該選項。影響到的字段類型有BINARY、VARBINARY、BLOB。 mysqldump -uroot -p --all-databases --hex-blob --host, -h 須要導出的主機信息 mysqldump -uroot -p --host=localhost --all-databases --ignore-table 不導出指定表。指定忽略多個表時,須要重複屢次,每次一個表。每一個表必須同時指定數據庫和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 …… mysqldump -uroot -p --host=localhost --all-databases --ignore-table=mysql.user --include-master-host-port 在--dump-slave產生的'CHANGE MASTER TO..'語句中增長'MASTER_HOST=<host>,MASTER_PORT=<port>' mysqldump -uroot -p --host=localhost --all-databases --include-master-host-port --insert-ignore 在插入行時使用INSERT IGNORE語句. mysqldump -uroot -p --host=localhost --all-databases --insert-ignore --lines-terminated-by 輸出文件的每行用給定字符串劃分。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項。 mysqldump -uroot -p --host=localhost test test --tab=」/tmp/mysql」 --lines-terminated-by=」##」 --lock-all-tables, -x 提交請求鎖定全部數據庫中的全部表,以保證數據的一致性。這是一個全局讀鎖,而且自動關閉--single-transaction 和--lock-tables 選項。 mysqldump -uroot -p --host=localhost --all-databases --lock-all-tables --lock-tables, -l 開始導出前,鎖定全部表。用READ LOCAL鎖定表以容許MyISAM表並行插入。對於支持事務的表例如InnoDB和BDB,--single-transaction是一個更好的選擇,由於它根本不須要鎖定表。 請注意當導出多個數據庫時,--lock-tables分別爲每一個數據庫鎖定表。所以,該選項不能保證導出文件中的表在數據庫之間的邏輯一致性。不一樣數據庫表的導出狀態能夠徹底不一樣。 mysqldump -uroot -p --host=localhost --all-databases --lock-tables --log-error 附加警告和錯誤信息到給定文件 mysqldump -uroot -p --host=localhost --all-databases --log-error=/tmp/mysqldump_error_log.err --max_allowed_packet 服務器發送和接受的最大包長度。 mysqldump -uroot -p --host=localhost --all-databases --max_allowed_packet=10240 --net_buffer_length TCP/IP和socket鏈接的緩存大小。 mysqldump -uroot -p --host=localhost --all-databases --net_buffer_length=1024 --no-autocommit 使用autocommit/commit 語句包裹表。 mysqldump -uroot -p --host=localhost --all-databases --no-autocommit --no-create-db, -n 只導出數據,而不添加CREATE DATABASE 語句。 mysqldump -uroot -p --host=localhost --all-databases --no-create-db --no-create-info, -t 只導出數據,而不添加CREATE TABLE 語句。 mysqldump -uroot -p --host=localhost --all-databases --no-create-info --no-data, -d 不導出任何數據,只導出數據庫表結構。 mysqldump -uroot -p --host=localhost --all-databases --no-data --no-set-names, -N 等同於--skip-set-charset mysqldump -uroot -p --host=localhost --all-databases --no-set-names --opt 等同於--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 該選項默認開啓, 能夠用--skip-opt禁用. mysqldump -uroot -p --host=localhost --all-databases --opt --order-by-primary 若是存在主鍵,或者第一個惟一鍵,對每一個表的記錄進行排序。在導出MyISAM表到InnoDB表時有效,但會使得導出工做花費很長時間。 mysqldump -uroot -p --host=localhost --all-databases --order-by-primary --password, -p 鏈接數據庫密碼 --pipe(windows系統可用) 使用命名管道鏈接mysql mysqldump -uroot -p --host=localhost --all-databases --pipe --port, -P 鏈接數據庫端口號 --protocol 使用的鏈接協議,包括:tcp, socket, pipe, memory. mysqldump -uroot -p --host=localhost --all-databases --protocol=tcp --quick, -q 不緩衝查詢,直接導出到標準輸出。默認爲打開狀態,使用--skip-quick取消該選項。 mysqldump -uroot -p --host=localhost --all-databases mysqldump -uroot -p --host=localhost --all-databases --skip-quick --quote-names,-Q 使用(`)引發表和列名。默認爲打開狀態,使用--skip-quote-names取消該選項。 mysqldump -uroot -p --host=localhost --all-databases mysqldump -uroot -p --host=localhost --all-databases --skip-quote-names --replace 使用REPLACE INTO 取代INSERT INTO. mysqldump -uroot -p --host=localhost --all-databases --replace --result-file, -r 直接輸出到指定文件中。該選項應該用在使用回車換行對(\\r\\n)換行的系統上(例如:DOS,Windows)。該選項確保只有一行被使用。 mysqldump -uroot -p --host=localhost --all-databases --result-file=/tmp/mysqldump_result_file.txt --routines, -R 導出存儲過程以及自定義函數。 mysqldump -uroot -p --host=localhost --all-databases --routines --set-charset 添加'SET NAMES default_character_set'到輸出文件。默認爲打開狀態,使用--skip-set-charset關閉選項。 mysqldump -uroot -p --host=localhost --all-databases mysqldump -uroot -p --host=localhost --all-databases --skip-set-charset --single-transaction 該選項在導出數據以前提交一個BEGIN SQL語句,BEGIN 不會阻塞任何應用程序且能保證導出時數據庫的一致性狀態。它只適用於多版本存儲引擎,僅InnoDB。本選項和--lock-tables 選項是互斥的,由於LOCK TABLES 會使任何掛起的事務隱含提交。要想導出大表的話,應結合使用--quick 選項。 mysqldump -uroot -p --host=localhost --all-databases --single-transaction --dump-date 將導出時間添加到輸出文件中。默認爲打開狀態,使用--skip-dump-date關閉選項。 mysqldump -uroot -p --host=localhost --all-databases mysqldump -uroot -p --host=localhost --all-databases --skip-dump-date --skip-opt 禁用–opt選項. mysqldump -uroot -p --host=localhost --all-databases --skip-opt --socket,-S 指定鏈接mysql的socket文件位置,默認路徑/tmp/mysql.sock mysqldump -uroot -p --host=localhost --all-databases --socket=/tmp/mysqld.sock --tab,-T 爲每一個表在給定路徑建立tab分割的文本文件。注意:僅僅用於mysqldump和mysqld服務器運行在相同機器上。注意使用--tab不能指定--databases參數 mysqldump -uroot -p --host=localhost test test --tab="/home/mysql" --tables 覆蓋--databases (-B)參數,指定須要導出的表名,在後面的版本會使用table取代tables。 mysqldump -uroot -p --host=localhost --databases test --tables test --triggers 導出觸發器。該選項默認啓用,用--skip-triggers禁用它。 mysqldump -uroot -p --host=localhost --all-databases --triggers --tz-utc 在導出頂部設置時區TIME_ZONE='+00:00' ,以保證在不一樣時區導出的TIMESTAMP 數據或者數據被移動其餘時區時的正確性。 mysqldump -uroot -p --host=localhost --all-databases --tz-utc --user, -u 指定鏈接的用戶名。 --verbose, --v 輸出多種平臺信息。 --version, -V 輸出mysqldump版本信息並退出 --where, -w 只轉儲給定的WHERE條件選擇的記錄。請注意若是條件包含命令解釋符專用空格或字符,必定要將條件引用起來。 mysqldump -uroot -p --host=localhost --all-databases --where=」 user=’root’」 --xml, -X 導出XML格式. mysqldump -uroot -p --host=localhost --all-databases --xml --plugin_dir 客戶端插件的目錄,用於兼容不一樣的插件版本。 mysqldump -uroot -p --host=localhost --all-databases --plugin_dir=」/usr/local/lib/plugin」 --default_auth 客戶端插件默認使用權限。 mysqldump -uroot -p --host=localhost --all-databases --default-auth=」/usr/local/lib/plugin/<PLUGIN>」
解決辦法是: 1. 刪除my.ini [client]下的 no-beep 參數; 2. 在 mysqldump 後加--no-defaults參數,即:mysqldump --no-defualts -h主機IP -u用戶名 -p密碼 數據庫 > xxx.sql 。