mysql備份方法(熱備)

 

mysql 熱備

在運維中需定期備份mysql,爲崩潰後的恢復數據做準備。一般分爲冷備和熱備,冷備就是停掉mysql服務,直接cp文件,但是在生產環境中,很 少有機會這樣,一般都是在mysql提供服務的時候就進行備份,因此這牽扯到數據一致性的問題。所以,在MyISAM存儲引擎下,我們的思路就是:鎖表 –>備份–>解鎖

# 進入mysql環境 鎖表
root@mysql : test > flush tables with read lock;# 在系統環境下 備份
cp -R test /tmp/backup/test_back
# 進入mysql環境 解鎖
root@mysql : test > unlock tables;

mysqlhotcopy 熱備工具

當然也可通過mysql自帶的工具 mysqlhotcopy 解決,事實上mysqlhotcopy是個perl程序,提供MyISAM下的鎖表備份解鎖操做。因爲是perl腳本,所以需要機器上有PERL-DBD 模塊,不然會報錯: Can’t locate DBI.pm in @INC ,安裝過程很簡單,在這裏: perl-DBI連接mysql

mysqlhotcopy也很簡單,參數可用 –help 查看

# 備份test庫爲新的test_tmp庫,與test同級目錄 
mysqlhotcopy  --user=root  --password=root   test   test_tmp
 
# 備份test庫 到 /tmp/ 目錄下 
mysqlhotcopy  --user=root  --password=root   test   /tmp/
 
# --checkpoint dbinfo.checkpoint 這個是指定存放操作記錄的數據庫/表# --addtodest 增量備份,新的備份自動覆蓋掉原來的
mysqlhotcopy  --user=root  --password=root  --checkpoint=dbinfo.checkpoint  --addtodest  test  /tmp/


 
mysqlhotcopy的安裝方法如下:

yum -y install perl perl-DBI
wget http://down1.chinaunix.net/distfiles/DBD-mysql-3.0002.tar.gz
tar zxvf DBD-mysql-3.0002.tar.gz
cd DBD-mysql-3.0002
perl Makefile.PL –mysql_config=/usr/local/mysql/bin/mysql_config
make
make test
make install
 

記錄到到數據庫的方法:
1、在數據庫段分配一個專門用於備份的用戶
mysql> grant select,reload,lock tables on *.* to 'hotcopyer'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

2、在/etc/my.cnf或者登陸用戶的個人主文件.my.cnf裏面添加
[mysqlhotcopy]
interactive-timeout
user=hotcopyer
password=123456
port=3306
 
重新加載mysql


3、可以把記錄寫到專門的表中。具體察看幫助。
mysql> create database hotcopy;
Query OK, 1 row affected (0.03 sec)
mysql> use hotcopy
Database changed
mysql> create table checkpoint(time_stamp timestamp not null,src varchar(32),dest varchar(60), msg varchar(255));
Query OK, 0 rows affected (0.01 sec)
同時記得給hotcopyer用戶權限。
mysql> grant insert on hotcopy.checkpoint to hotcopyer@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit;

4、備份數據(寫入數據庫{備份的結果},增量備份)

/usr/local/mysql/bin/mysqlhotcopy --user=root --password=mysql --checkpoint=hotcopy.checkpoint --addtodest radius /bak
 
5、查看
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| 1234la             |
| conntrack          |
| hotcopy            |
| mysql              |
| pinphp             |
| radius             |
| test               |
| vod                |
| web                |
+--------------------+
10 rows in set (0.00 sec)

mysql> show tables;
+-------------------+
| Tables_in_hotcopy |
+-------------------+
| checkpoint        |
+-------------------+
1 row in set (0.00 sec)

mysql> select * from checkpoint;
+---------------------+--------+---------------+-----------+
| time_stamp          | src    | dest          | msg       |
+---------------------+--------+---------------+-----------+
| 2012-08-25 21:50:26 | radius | /bak/radius   | Succeeded |
+---------------------+--------+---------------+-----------+
1 row in set (0.00 sec)

mysql>
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章