【MYSQL實時備份】主從模式
怎麼安裝mysql資料庫,這裡不說了,只說它的主從複製,步驟如下:
1、主從伺服器分別作以下操作:
1.1、MYSQL版本一致
1.2、初始化表,並在後臺啟動mysql
1.3、主ip:139.0.0.31 ,從IP:139.0.0.32
2、修改主伺服器master:
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[必須]啟用二進位制日誌
server-id=31 //[必須]伺服器唯一ID,預設是1,一般取IP最後一段
max_binlog_size= 104857600 //最大日誌檔案為100M
3、修改從伺服器slave:
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[必須]啟用二進位制日誌
server-id=32 //[必須]伺服器唯一ID,預設是1,一般取IP最後一段
max_binlog_size= 104857600 //最大日誌檔案為100M
4、重啟兩臺伺服器的mysql
/etc/init.d/mysqld restart
5、在主伺服器上建立帳戶並授權slave:
#mysql -uroot -p密碼
mysql>grant replication slave on *.* to 'mysync'@'%' identified by 'mysync'; //一般不用root帳號,“%”表示所有客戶端都可能連,只要帳號,密碼正確,此處可用具體客戶端IP代替,如139.0.0.32,加強安全。
6、登入主伺服器的mysql,查詢master的狀態
mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 98 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
注:執行完此步驟後不要再操作主伺服器MYSQL,防止主伺服器狀態值Position變化,下一步會用到。
7、配置從伺服器Slave:
mysql>change master to master_host='139.0.0.31',master_user='mysync',master_password='mysync',master_log_file='mysql-bin.000001',master_log_pos=98; //注意不要斷開,“98”無單引號。
Mysql>start slave; //啟動從伺服器複製功能
8、檢查從伺服器複製功能狀態:
mysql> show slave status;
+----------------------------------+-------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
| Slave_IO_State | Master_Host | Master_User | Master_Port | Connect_Retry | Master_Log_File | Read_Master_Log_Pos | Relay_Log_File | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master |
+----------------------------------+-------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
| Waiting for master to send event | 139.0.0.31 | mysync | 3306 | 60 | mysql-bin.000001 | 98 | mysqld-relay-bin.000002 | 235 | mysql-bin.000001 | Yes | Yes | | | | | | | 0 | | 0 | 98 | 235 | None | | 0 | No | | | | | | 0 |
+----------------------------------+-------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
1 row in set (0.00 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 139.0.0.31
Master_User: test
Master_Port: 3306
Connect_Retry: 60
Master_Log_File:
Read_Master_Log_Pos: 4
Relay_Log_File: mysqld-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 0
Relay_Log_Space: 117
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
1 row in set (0.00 sec)
注:Slave_IO_Running及Slave_SQL_Running程式必須正常執行,即YES狀態,否則都是錯誤的狀態(如:其中一個NO均屬錯誤)。
以上操作過程,主從伺服器配置完成。
9、主從伺服器測試:
主伺服器Mysql,建立資料庫,並在這個庫中建表插入一條資料:
mysql> create database ucds;
Query OK, 1 row affected (0.00 sec)
mysql> use ucds;
Database changed
mysql> create table t(a int,b int);
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t values(1,1);
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| ucds |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
從伺服器Mysql查詢:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| ucds | //I'M here,大家看到了吧
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> use ucds
Database changed
mysql> select * from t; //可以看到在主伺服器上新增的具體資料
+------+------+
| a | b |
+------+------+
| 1 | 1 |
+------+------+
1 row in set (0.00 sec)
1.1、MYSQL版本一致
1.2、初始化表,並在後臺啟動mysql
1.3、主ip:139.0.0.31 ,從IP:139.0.0.32
2、修改主伺服器master:
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[必須]啟用二進位制日誌
server-id=31 //[必須]伺服器唯一ID,預設是1,一般取IP最後一段
max_binlog_size= 104857600 //最大日誌檔案為100M
3、修改從伺服器slave:
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[必須]啟用二進位制日誌
server-id=32 //[必須]伺服器唯一ID,預設是1,一般取IP最後一段
max_binlog_size= 104857600 //最大日誌檔案為100M
4、重啟兩臺伺服器的mysql
/etc/init.d/mysqld restart
5、在主伺服器上建立帳戶並授權slave:
#mysql -uroot -p密碼
mysql>grant replication slave on *.* to 'mysync'@'%' identified by 'mysync'; //一般不用root帳號,“%”表示所有客戶端都可能連,只要帳號,密碼正確,此處可用具體客戶端IP代替,如139.0.0.32,加強安全。
6、登入主伺服器的mysql,查詢master的狀態
mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 98 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
注:執行完此步驟後不要再操作主伺服器MYSQL,防止主伺服器狀態值Position變化,下一步會用到。
7、配置從伺服器Slave:
mysql>change master to master_host='139.0.0.31',master_user='mysync',master_password='mysync',master_log_file='mysql-bin.000001',master_log_pos=98; //注意不要斷開,“98”無單引號。
Mysql>start slave; //啟動從伺服器複製功能
8、檢查從伺服器複製功能狀態:
mysql> show slave status;
+----------------------------------+-------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
| Slave_IO_State | Master_Host | Master_User | Master_Port | Connect_Retry | Master_Log_File | Read_Master_Log_Pos | Relay_Log_File | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master |
+----------------------------------+-------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
| Waiting for master to send event | 139.0.0.31 | mysync | 3306 | 60 | mysql-bin.000001 | 98 | mysqld-relay-bin.000002 | 235 | mysql-bin.000001 | Yes | Yes | | | | | | | 0 | | 0 | 98 | 235 | None | | 0 | No | | | | | | 0 |
+----------------------------------+-------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
1 row in set (0.00 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 139.0.0.31
Master_User: test
Master_Port: 3306
Connect_Retry: 60
Master_Log_File:
Read_Master_Log_Pos: 4
Relay_Log_File: mysqld-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 0
Relay_Log_Space: 117
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
1 row in set (0.00 sec)
注:Slave_IO_Running及Slave_SQL_Running程式必須正常執行,即YES狀態,否則都是錯誤的狀態(如:其中一個NO均屬錯誤)。
以上操作過程,主從伺服器配置完成。
9、主從伺服器測試:
主伺服器Mysql,建立資料庫,並在這個庫中建表插入一條資料:
mysql> create database ucds;
Query OK, 1 row affected (0.00 sec)
mysql> use ucds;
Database changed
mysql> create table t(a int,b int);
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t values(1,1);
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| ucds |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
從伺服器Mysql查詢:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| ucds | //I'M here,大家看到了吧
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> use ucds
Database changed
mysql> select * from t; //可以看到在主伺服器上新增的具體資料
+------+------+
| a | b |
+------+------+
| 1 | 1 |
+------+------+
1 row in set (0.00 sec)
10、完成:
用網管監控slave的兩個“yes”,如發現只有一個或零個“yes”,就表明主從有問題了,警報。
11、後期日誌清理:
隨著日期的增長,MYSQL會產生大量的日誌,佔用大量的磁碟空間,主伺服器 mysql-bin.00000X ,從伺服器 mysqld-relay-bin.00000X
主伺服器清理日誌方式如下:
A:在每個從伺服器上,使用SHOW SLAVE STATUS來檢查它正在讀取哪個日誌。
B:使用SHOW MASTER LOGS獲得主伺服器上的一系列日誌。
C:在所有的從伺服器中判定最早的日誌,這個是目標日誌,如果所有的從屬伺服器是更新的,就是清單上的最後一個日誌。
D:清理所有的日誌,但是不包括目標日誌,因為從伺服器還要跟它同步。
清理日誌方法為:
PURGE MASTER LOGS TO 'mysql-bin.000010';
PURGE MASTER LOGS BEFORE '2012-12-30 21:00:00';
用網管監控slave的兩個“yes”,如發現只有一個或零個“yes”,就表明主從有問題了,警報。
11、後期日誌清理:
隨著日期的增長,MYSQL會產生大量的日誌,佔用大量的磁碟空間,主伺服器 mysql-bin.00000X ,從伺服器 mysqld-relay-bin.00000X
主伺服器清理日誌方式如下:
A:在每個從伺服器上,使用SHOW SLAVE STATUS來檢查它正在讀取哪個日誌。
B:使用SHOW MASTER LOGS獲得主伺服器上的一系列日誌。
C:在所有的從伺服器中判定最早的日誌,這個是目標日誌,如果所有的從屬伺服器是更新的,就是清單上的最後一個日誌。
D:清理所有的日誌,但是不包括目標日誌,因為從伺服器還要跟它同步。
清理日誌方法為:
PURGE MASTER LOGS TO 'mysql-bin.000010';
PURGE MASTER LOGS BEFORE '2012-12-30 21:00:00';
如果你確定從伺服器已經同步過了,跟主伺服器一樣了,那麼可以直接RESET
MASTER將這些檔案刪除。
mysql> reset master;
Query OK, 0 rows affected (0.02 sec)
在mysql裡show了一下variables,
mysql> show variables like '%log%';
查到了
| expire_logs_days | 0 |
這個預設是0,也就是logs不過期,這個是一個global的引數,所以需要執行
mysql> reset master;
Query OK, 0 rows affected (0.02 sec)
在mysql裡show了一下variables,
mysql> show variables like '%log%';
查到了
| expire_logs_days | 0 |
這個預設是0,也就是logs不過期,這個是一個global的引數,所以需要執行
set global
expire_logs_days=7;
這樣7天前的log就會被刪除了,但這樣設定還不行,下次重啟mysql了,配置又恢復預設了,所以需在my.cnf中設定
這樣7天前的log就會被刪除了,但這樣設定還不行,下次重啟mysql了,配置又恢復預設了,所以需在my.cnf中設定
expire_logs_days = 7
這樣重啟也不怕了
這樣重啟也不怕了
從伺服器清理日誌方式:
如果你確定從伺服器已經同步過了,跟主伺服器一樣了,
那麼可以先STOP SLAVE,然後RESET SLAVE將這些檔案刪除。
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)
mysql> reset
slave;
Query OK, 0 rows affected (0.15 sec)
清理完日誌後,主從配置需重新設定。
Query OK, 0 rows affected (0.15 sec)
清理完日誌後,主從配置需重新設定。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20553601/viewspace-1065551/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL主從備份MySql
- Centos Mysql 主從備份CentOSMySql
- MySQL主從配置及mysqldump備份MySql
- 學一點 mysql 雙機異地熱備份----快速理解mysql主從,主主備份原理及實踐MySql
- mongodb主從備份MongoDB
- redis主從備份Redis
- MySQL備份與主備配置MySql
- Mysql主從熱備MySql
- MySQL 定時備份MySql
- 實戰-MySQL定時增量備份(2)MySql
- 實時備份mysql binlog日誌MySql
- 實現MySQL資料庫的實時備份MySql資料庫
- mysql主從複製+主備切換MySql
- mysql主從和主備的區別MySql
- MySQL主主模式和主從模式的區別MySql模式
- 實戰-MySQL定時全量備份(1)MySql
- MySQL 定時增量備份MySql
- MYSQL定時備份(一)MySql
- MySQL 高可用架構:主從備份及讀寫分離MySql架構
- mysql主從複製(冷備)MySql
- mysql容器的定時備份指令碼,有二種方法,備份好後打包傳送到遠端備份主機MySql指令碼
- linux實現mysql資料庫每天自動備份定時備份LinuxMySql資料庫
- 【Mysql】利用xtraceback備份搭建從庫MySql
- Mysql 資料庫主庫,備庫實時同步配置MySql資料庫
- Mysql 主從延時監控MySql
- 怎樣在SQL Server搭建主從備份SQLServer
- mysql每天定時備份指令碼MySql指令碼
- mysql定時備份shell指令碼MySql指令碼
- MySQL 主從複製,雙機熱備MySql
- Mysql 主從同步實戰MySql主從同步
- Mysql實現主從複製(一主雙從)MySql
- MySQL 主備MySql
- Mysql定時備份資料指令碼MySql指令碼
- Mysql跨庫主從熱備失效問題MySql
- MySQL主從分離實現MySql
- mysql實現主從複製MySql
- MySQL 主從複製實操MySql
- MySQL資料庫定時備份的幾種實現方法MySql資料庫