首頁 > 資料庫 > mysql教程 > MySQL之-資料庫雙機熱備的設定方法及程式碼範例

MySQL之-資料庫雙機熱備的設定方法及程式碼範例

黄舟
發布: 2017-03-11 14:01:40
原創
964 人瀏覽過

mysql資料庫沒有增量備份的機制,當資料量太大的時候備份是一個很大的問題。還好mysql資料庫提供了一個主從備份的機制,其實就是把主資料庫的所有的資料同時寫到備份資料庫中。

一、說明

1、mysql資料庫沒有增量備份的機制,當資料量太大的時候備份是一個很大的問題。還好mysql資料庫提供了一個主從備份的機制,其實就是把主資料庫的所有的資料同時寫到備份資料庫中。實作mysql資料庫的熱備份。
2、要實現雙機的熱備首先要了解主從資料庫伺服器的版本的需求。要實現熱備mysql的版本都要高於3.2,還有一個基本的原則就是作為從資料庫的資料庫版本可以高於主伺服器資料庫的版本,但不可以低於主伺服器的資料庫版本。

二、設定

1、設定主伺服器

a.查看版本

先查看主伺服器的版本是否是支援熱備的版本。然後查看my.cnf(類別unix)或my.ini(windows)中mysqld配置區塊的配置有沒有log-bin(記錄資料庫變更日誌),因為mysql的複製機制是基於日誌的複製機制,所以主伺服器一定要支援更改日誌才行。然後設定要寫入日誌的資料庫或不要寫入日誌的資料庫。這樣只有您感興趣的資料庫的變更才會寫入到資料庫的日誌中。

server-id=1 //数据库的id这个应该默认是1就不用改动
log-bin=log_name //日志文件的名称,这里可以制定日志到别的目录 如果没有设置则默认主机名的一个日志名称
binlog-do-db=db_name //记录日志的数据库
binlog-ignore-db=db_name //不记录日志的数据库
登入後複製

以上的如果有多個資料庫用","分割開
然後設定同步資料庫的使用者帳號

mysql> GRANT REPLICATION SLAVE ON *.*
-> TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';
登入後複製

4.0.2以前的版本, 因為不支持REPLICATION 要使用下面的語句來實現這個功能

mysql> GRANT FILE ON *.*
-> TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';
登入後複製

設定好主伺服器的設定檔後重新啟動資料庫

b.鎖定現有的資料庫並備份現在的資料

鎖定資料庫

mysql> FLUSH TABLES WITH READ LOCK;
登入後複製
登入後複製

備份資料庫有兩種方法一種是直接進入到mysql的data目錄然後打包你需要備份資料庫的資料夾,第二種是使用mysqldump的方式來備份資料庫但是要加上"--master-data " 這個參數,建議使用第一種方法來備份資料庫
c.查看主伺服器的狀態

mysql> show master status\G;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+
登入後複製

記錄File 和Position 項目的值,以後要用的。
d.然後把資料庫的鎖定開啟

mysql> UNLOCK TABLES;
登入後複製

4。設定從伺服器

a.先設定資料庫的設定檔
server-id=n //设置数据库id默认主服务器是1可以随便设置但是如果有多台从服务器则不能重复。
master-host=db-master.mycompany.com //主服务器的IP地址或者域名
master-port=3306 //主数据库的端口号
master-user=pertinax //同步数据库的用户
master-password=freitag //同步数据库的密码
master-connect-retry=60 //如果从服务器发现主服务器断掉,重新连接的时间差
report-host=db-slave.mycompany.com //报告错误的服务器
登入後複製
b.把從主資料庫伺服器備份出來的資料庫匯入到從伺服器中
c.啟動從資料庫

然後啟動從資料庫伺服器,如果啟動的時候沒有加上"--skip-slave-start"這個參數則進入到mysql中

mysql> slave stop; //停止slave的服务
登入後複製
d.設定主伺服器的各種參數
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name', //主服务器的IP地址
-> MASTER_PORT=3306, //主服务器端口
-> MASTER_USER='replication_user_name', //同步数据库的用户
-> MASTER_PASSWORD='replication_password', //同步数据库的密码
-> MASTER_LOG_FILE='recorded_log_file_name', //主服务器二进制日志的文件名(前面要求记住的参数)
-> MASTER_LOG_POS=recorded_log_position; //日志文件的开始位置(前面要求记住的参数)
登入後複製
登入後複製
e.啟動同步資料庫的執行緒
mysql> slave start;
登入後複製
登入後複製

查看資料庫的同步狀況吧。如果能夠成功同步那就恭喜了!
查看主從伺服器的狀態

mysql> SHOW PROCESSLIST\G //可以查看mysql的进程看看是否有监听的进程
登入後複製

三、清除日誌

如果日誌太大清除日誌的步驟如下:

1.鎖定主資料庫

mysql> FLUSH TABLES WITH READ LOCK;
登入後複製
登入後複製

2.停掉從資料庫的slave

mysql> slave stop;
登入後複製

3.查看主資料庫的日誌檔案名稱和日誌檔案的position

show master status;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_do_db | Binlog_ignore_db |
+---------------+----------+--------------+------------------+
| louis-bin.001 | 79 | | mysql |
+---------------+----------+--------------+------------------+
登入後複製

4.解開主資料庫的鎖

mysql> unlock tables;
登入後複製

5.更新從資料庫中主資料庫的資訊

mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name', //主服务器的IP地址
-> MASTER_PORT=3306, //主服务器端口
-> MASTER_USER='replication_user_name', //同步数据库的用户
-> MASTER_PASSWORD='replication_password', //同步数据库的密码
-> MASTER_LOG_FILE='recorded_log_file_name', //主服务器二进制日志的文件名(前面要求记住的参数)
-> MASTER_LOG_POS=recorded_log_position; //日志文件的开始位置(前面要求记住的参数)
登入後複製
登入後複製

6.啟動從資料庫的slave

mysql> slave start;
登入後複製
登入後複製

以上是MySQL之-資料庫雙機熱備的設定方法及程式碼範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板