mysql儲存過程以及日誌和資料恢復
阿新 • • 發佈:2018-11-22
MySQL儲存過程
Mysql儲存過程是一組為了完成特定功能的SQL語句集,經過編譯之後儲存在資料庫中,
當需要使用該組SQL語句時使用者只需要通過指定儲存過程的名字並給定引數就可以呼叫執行它了
簡而言之就是一組已經寫好的命令,需要使用的時候拿出來用就可以了。
\d //(修改語句結束符號)
create procedure p1()
begin
set @i=0;
while @i<10 do
insert into user values(null,concat('user',@i),@i,concat('user',@i,'@qq.com'),1,99);
set @[email protected] +1;
end while;
end;
//
執行儲存:call p1 檢視儲存具體資訊:show create procedure p1\G 刪除觸發器: drop procedure p1;
這個儲存過程,一定要有begin 和end,因為if後面有兩條語句要處理,相當於c#裡的花括號一樣。
開啟bin-log日誌
1,使用vim或其它編輯器 開啟 mysql 配置檔案 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 2,找到 以下兩個配置項 server-id = 123456 log_bin = /var/log/mysql/mysql-bin 3,把註釋開啟 改完後 儲存推出 4,重啟mysql sudo service mysql restart 5,檢視bin-log日誌: mysql>show binary logs; 6,ls 檢視是否存在mysql日誌檔案 cd /var/lib/mysql mysql>reset master; 7,清空所有的bin-log日誌 8,-- 檢視binlog日誌檔案 mysqlbinlog mysql-bin.000001
備份資料時 重新整理日誌:
mysqldump -uroot -pwei test -l -F '/tmp/test.sql'
其中:-F即flush logs,可以重新生成新的日誌檔案,當然包括log-bin日誌
資料庫的恢復
前提是開啟了bin-log日誌,並定期備份
思路:
1,通過定期備份的檔案恢復大量資料 2,通過日誌恢復備份後的資料操作 -- 重新整理 日誌 mysql> reset master; Query OK, 0 rows affected (0.39 sec) -- 查詢最新日誌 show binary logs; -- 建立資料庫 mysql> create database ops; Query OK, 1 row affected (0.28 sec) -- 選擇並開啟庫 mysql> use ops; Database changed -- 建立表 create table user( id int not null auto_increment, name char(20) not null, age int not null, primary key(id) )engine=InnoDB; -- 新增資料 insert into user values(1,"wangbo","24"),(2,"guohui","22"),(3,"zhangheng","27"); -- 查詢 mysql> select * from user; +----+-----------+-----+ | id | name | age | +----+-----------+-----+ | 1 | wangbo | 24 | | 2 | guohui | 22 | | 3 | zhangheng | 27 | +----+-----------+-----+ 3 rows in set (0.00 sec) -- 現在進行資料備份 mysqldump -uroot -p -B -F -R -x --master-data=2 ops >/home/yc/py08/04-mysql/ops.sql ----------------- 引數說明: -B:指定資料庫 -F:重新整理日誌 -R:備份儲存過程等 -x:鎖表 --master-data:在備份語句裡新增CHANGE MASTER語句以及binlog檔案及位置點資訊 -- 再新增新的資料 insert into user values(4,"liupeng","21"),(5,"xiaoda","31"),(6,"fuaiai","26"); -- 查詢資料 mysql> select * from user; +----+-----------+-----+ | id | name | age | +----+-----------+-----+ | 1 | wangbo | 24 | | 2 | guohui | 22 | | 3 | zhangheng | 27 | | 4 | liupeng | 21 | | 5 | xiaoda | 31 | | 6 | fuaiai | 26 | +----+-----------+-----+ 6 rows in set (0.00 sec) -- 此時誤操作,刪除了test資料庫 drop database ops; mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | python4 | | sys | | wx | +--------------------+ 6 rows in set (0.00 sec)
1,先講binlog檔案匯出
-- 將binlog檔案匯出sql檔案,並vim編輯它刪除其中的drop語句
-- [[email protected] backup]# mysqlbinlog -d ops /var/lib/mysql/mysql-bin.000002> /home/yc/002bin.sql
sudo mysqlbinlog -d ops /var/log/mysql/mysql-bin.000002> /home/yc/py08/04-mysql/002bin.sql
2,-- 刪除裡面的drop語句
vim 002bin.sql
3,-- 匯入備份的資料檔案,
mysql -uroot -p < /home/yc/py08/04-mysql/ops.sql
4,-- 再匯入刪除 drop語句後的 binlog日誌檔案
mysql -uroot -p ops < /home/yc/py08/04-mysql/002bin.sql