mysql 实时备份_MySQL实现实时备份[转]
本文轉自:http://www.cnblogs.com/vforbox/p/4860422.html
環境介紹
1.兩臺服務器進行主從同步復制(安裝可以通過google查詢相關資料或者看筆者的這篇免安裝版)
2.利用Windows腳本和Windows自帶的計劃任務,將主服務器進行實時備份(下面進行演示)
Maseter MySQL: 192.168.1.253
Slave ? ?MySQL: 192.168.1.254
3.在主服務器上開啟二進制日志功能,設置唯一的服務器ID編號,這些設置需要重啟MySQL服務
4.在從服務器上設置唯一的服務器ID編號,這些設置需要重啟MySQL服務
5.在主服務器上為了不用從服務器創建可以讀取主服務器日志文件的用戶,或使用相同的統一用戶
6.在進行數據復制之前,需要記錄主服務器上二進制文件的位置的標記
7.在進行數據復制之前,保證從服務器和主服務器上的數據一致
主服務器的配置
在實際的環境中,可能在我們還沒有部署數據庫的同步前,數據庫中就已經存在大量的數據。所以,在操作數據庫的時候一定記住備份
mysqldump -u root -p --all-databases --lock-all-tables > G:/dbdump.sql
Enter password: ******
我們需要在主服務器上開啟二進制日志并設置服務器編號,服務器唯一編號是2的32次方減1之間的整數,根據自己的實際情況而設置
C:\Users\Administrator>net stop mysql
MySQL 服務正在停止.
MySQL 服務已成功停止。
[mysqld]
log-bin=mysql-bin
server-id=1C:\Users\Administrator>net start mysql
MySQL 服務正在啟動 .
MySQL 服務已經啟動成功。
為了使從服務器能夠同步復制,我們需要創建一個同步復制的用戶
1.執行數據復制時,所有的從服務器都需要使用用戶與密碼連接MySQL主服務器,所以在主服務器上必須存在至少一個用戶及相應的密碼提供從服務器來連接
2.但是這個用戶必須擁有"REPLICATION SLAVE" 權限,當然你可以給不同的從服務器創建不用的用戶與密碼,也可以使用統一的用戶與密碼
3.如果該用戶僅為數據庫復制所使用,則該用戶僅需要"REPLICATION SLAVE"權限即可
1 C:\Users\Administrator>mysql -u root -p2 Enter password: ******
3 Welcome to the MySQL monitor. Commands end with ; or\g.4 Your MySQL connection id is 1
5 Server version: 5.6.25MySQL Community Server (GPL)6
7 Copyright (c) 2000, 2015, Oracle and/or its affiliates. Allrights reserved.8
9 Oracle is a registered trademark of Oracle Corporation and/orits10 affiliates. Other names may be trademarks oftheir respective11 owners.12
13 Type 'help;' or '\h' for help. Type '\c' to clear the currentinput statement.14 mysql> CREATE USER 'slave'@'%' IDENTIFIED BY 'slaveAdmin';15 Query OK, 0 rows affected (0.02sec)16
17 mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';18 Query OK, 0 rows affected (0.00sec)19
20 mysql> FLUSH PRIVILEGES;21 Query OK, 0 rows affected (0.00sec)22
23 mysql> exit
24 Bye
獲取主服務器二進制日志信息
1.首先我們來了解一下二進制文件的基本信息,這些信息在對從服務器的設置需要用到,它包括服務器二進制文件名稱及當前日志記錄位置,這樣從服務器就可以知道哪里開始進行復制操作
2.當我們得到二進制文件名以及二進制當前記錄的位置時請牢記,在從服務器上會用到
1 mysql> FLUSH TABLES WITH READLOCK;2 Query OK, 0 rows affected (0.00sec)3
4 mysql>SHOW MASTER STATUS;5 +------------------+----------+--------------+------------------+-------------------+
6 | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
7 +------------------+----------+--------------+------------------+-------------------+
8 | mysql-bin.000004 | 9876212 | | | |
9 +------------------+----------+--------------+------------------+-------------------+
10 1 row in set (0.00sec)11
12 mysql>UNLOCK TABLES;13 Query OK, 0 rows affected (0.00 sec)
1.File列顯示的是二進制日志文件名,Position為當前日志記錄位置
2.FLUSH TABLES WITH READ LOCK 命令的作用是對所有數據庫的表執行只讀鎖定,當只讀鎖定后所有數據庫寫操作都將被拒絕,但讀操作可以繼續
3.執行鎖定可以防止在查看二進制日志信息的同時有人對操作進行修改操作,最后使用 UNLOCK TABLES 命令對全局鎖執行結束操作
從服務器的配置
和主服務器一樣,需要配置my.ini或者my.cnf 文件,注意這里的從服務器ID編號
C:\Users\Administrator>net stop mysql
MySQL 服務正在停止.
MySQL 服務已成功停止。[mysqld]server-id=2C:\Users\Administrator>net start mysql
MySQL 服務正在啟動 .
MySQL 服務已經啟動成功。
對于復制而言,MySQL從服務器二進制功能是不需要開啟的,當然也可以開啟從服務器上的二進制功能來實現數據備份與恢復
在介紹里面我已經說到在進行數據復制之前,保證從服務器和主服務器上的數據一致,還記得我剛才將主服務器的MySQL進行備份嗎?! 可以將這備份還原到從服務器上面,這樣主從的數據就是一樣的了
mysql -u root -p < D:/dbdump.sql
Enter password:******
配置從服務器連接主服務器進行數據復制
1.其實數據復制的關鍵操作是配置從服務器去連接主服務器進行數據復制,我們需要告訴從服務器建立網絡連接所有必要的信息
2.使用 CHANGE MASTER TO 語句完成與主服務器的連接工作
??MASTER_HOST 指定主服務器主機名或者Ip地址
??MASTER_USER 為剛才在主服務器上創建的擁有復制權限的用戶
? MASTER_PASSWORD 為改用戶的秘密
???MASTER_LOG_FILE 指定主服務器二進制日志文件名稱
? MASTER_LOG_POS?指定主服務器二進制日志文件當前的位置
START LSAVE 開啟從服務器功能進行主從連接
SHOW SLAVE STATUS 查看從服務器狀態
1 mysql> CHANGE MASTER TO
2 -> MASTER_HOST='192.168.1.253',3 -> MASTER_USER='slave',4 -> MASTER_PASSWORD='slaveAdmin',5 -> MASTER_LOG_FILE='mysql-bin.000004',6 -> MASTER_LOG_POS=9876212;7 Query OK, 0 rows affected (0.00 sec)
1 mysql>START SLAVE;2 Query OK, 0 rows affected (0.00sec)3 mysql> SHOW SLAVE STATUS\G;
查看狀態時,下面兩個都要為 YES 說明才是正常運行狀態,如果IO為No 則檢查密碼或者從新寫入
Slave_IO_Running:
Slave_SQL_Running:
現在當我們在主服務器上創建一個數據庫時,我們再到從服務器上查看,這時就可以看到已經把主服務器上新創建數據庫的同步過來了
1 mysql> create databasevforbox;2 Query OK, 1 row affected (0.00sec)3
4 mysql>show databases;5 +--------------------+
6 | Database |
7 +--------------------+
8 | information_schema |
9 | mysql |
10 | performance_schema |
11 | test |
12 | vforbox |
13 +--------------------+
Windows 定時備份數據庫腳本
上面介紹中已經提到用Windows腳本和Windows自帶的計劃任務,將主服務器進行實時備份
新建一個 "mysql_auto_bak.bat"
1 @echooff2 cls3 color 3E4 title %date% %time:~,5% 備份MySQL數據庫 By:vforobx5 ::::::::::::::::::::::::以下是需要配置的參數::::::::::::::::::::::::::::::::::::::::
6
7 rem 設置 MySQL服務器root賬號的密碼,特殊符號需要在其前添加兩個^
8 SET MySQL_pw=123456
9 rem 設置 數據庫備份目錄10 SET BAK_dir=D:\mysqlbak11 rem 設置 需要備份的myisam格式數據庫12 SET BAK_db_myisam=myisam_db13 rem 設置 需要備份的innodb格式數據庫14 SET BAK_db_innodb=innodb15 rem 設置 WinRAR壓縮軟件的路徑16 SET RAR_dir="C:\Program files (x86)\WinRAR\WinRAR.exe"
17 rem 設置 以2015-10-01格式的日期為子目錄18 SET BAK_dir2=%date:~0,4%-%date:~5,2%-%date:~8,2%
19 rem 設置 備份文件名20 SET BAK_file=%%i_%BAK_dir2%.sql21 rem 設置日志文件里面指向的rar文件路徑22 SET BAK_file2=%%i_%BAK_dir2%
23 rem 設置 日志文件名24 SET LOG_file=%BAK_dir%\%BAK_dir2%\Mysql_bak.log
25
26 ::::::::::::::::::::::::以上是需要配置的參數::::::::::::::::::::::::::::::::::::::::
27
28 ::::::::::::::::::::::::以下是判斷變量是否定義::::::::::::::::::::::::::::::::::::::
29
30 if not defined MySQL_pw (echoMySQL_pw 尚未定義!)31 if not defined BAK_dir (echoBAK_dir 尚未定義!)32 if not definedRAR_dir (RAR_dir 尚未定義!)33
34 ::::::::::::::::::::::::以下是記錄時間日志::::::::::::::::::::::::::::::::::::::::::
35
36 if not definedBAK_db_myisam (goto innodb)37 echo.開始以當前日期創建文件夾38 if not exist %BAK_dir%\%BAK_dir2% md %BAK_dir%\%BAK_dir2%
39 cd /d %BAK_dir%\%BAK_dir2%
40 echo. 開始建立(%BAK_dir2%)的備份41 ::::::::::::::::::::::::以下是備份的核心代碼::::::::::::::::::::::::::::::::::::::::
42
43 echo 備份時間: %BAK_dir2% %time:~0,8% >> %LOG_file%
44 echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> %LOG_file%
45 SETLocal DisableDelayedExpansion46 for %%i in (%BAK_db_myisam%) do(47 mysqldump -h 192.168.1.253 -uroot -p%MySql_pw% --all-databases >%BAK_file%
48 %RAR_Dir% a %BAK_file:~0,-4%.rar %BAK_file%
49 DEL /F /A /Q %BAK_file%
50 echo 數據庫【%%i 格式】已經備份到: %BAK_dir%\%BAK_dir2%\%BAK_file2%.rar >> %LOG_file%)51 ::::::::::::::::::::::::以下是 innodb格式的備份代碼::::::::::::::::::::::::::::::::::
52
53 if not definedBAK_db_innodb (goto exitbat)54 echo.開始以當前日期創建文件夾55 if not exist %BAK_dir%\%BAK_dir2% md %BAK_dir%\%BAK_dir2%
56 cd /d %BAK_dir%\%BAK_dir2%
57 echo. 開始建立今天(%BAK_dir2%)的備份58 SETLocal DisableDelayedExpansion59 for %%i in (%BAK_db_innodb%) do(60 mysqldump -h 192.168.1.253 -uroot -p%MySQL_pw% --all-databases >%BAK_file%
61 %RAR_dir% a %BAK_file:~0,-4%.rar %BAK_file%
62 DEL /F /A /Q %BAK_file%
63 echo 數據庫【%%i 格式】已經備份到:%BAK_dir%\%BAK_dir2%\%BAK_file2%.rar >> %LOG_file%)64 echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> %LOG_file%
65 echo.所有備份建立完畢66 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
67 rem 清除變量68 SET MySQL_pw=
69 SET BAK_dir=
70 SET RAR_dir=
71 SET BAK_dir2=
72 SET BAK_file=
73 SET BAK_file274 SET LOG_file=
如果覺得復制麻煩-點擊下載
然后將腳本加入Windwos自帶計劃任務,這里筆者將不截圖演示如何創建計劃任務了,如需幫助請自行google
總結
以上是生活随笔為你收集整理的mysql 实时备份_MySQL实现实时备份[转]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸡肉可以炖什么汤
- 下一篇: shell+mysql获取数据库名_sh