mysql主從複製

1.編輯主庫配置文件,添加以下內容mysql

[root@localhost pub]# vi /etc/my.cnf
[mysqld]
log_bin=master-bin        #開啓二進制日誌,並給二進制日誌文件起名
server_id=1                     #配置服務器節點id,全局惟一
innodb_file_per_table=ON      #開啓每表單獨存儲
skip_name_resolve=on           #關閉域名反解 

2.查看二進制日誌開啓狀況sql

MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%log_bin%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | ON    |
| log_bin_trust_function_creators | OFF   |
| sql_log_bin                     | ON    |
+---------------------------------+-------+
3 rows in set (0.00 sec)

MariaDB [(none)]> SHOW MASTER LOGS;
+-------------------+-----------+
| Log_name          | File_size |
+-------------------+-----------+
| master-bin.000001 |     30379 |
| master-bin.000002 |   1038814 |
| master-bin.000003 |       245 |
+-------------------+-----------+
3 rows in set (0.00 sec)

 3.查看服務id數據庫

MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 1     |
+---------------+-------+
1 row in set (0.00 sec)

4.建立一個擁有複製權限的帳號,並將主庫鎖定,不能寫入 安全

MariaDB [mysql]> GRANT REPLICATION SLAVE , REPLICATION CLIENT ON *.* TO copy@'%' IDENTIFIED BY 'copy';
MariaDB [mysql]> FLUSH PRIVILEGES ;
MariaDB [mysql]> FLUSH tables with read lock; 

4.1在主庫中備份出全部數據,在從庫上恢復bash

#主庫備份
[root@localhost ~]# mysqldump -uroot -p 數據庫名稱 > /root/備份庫位置
Enter password: 


#從庫恢復
[root@localhost ~]# mysql -uroot -p 數據庫名稱 < 數據庫備份文件
Enter password: 

5.編輯從庫配置文件服務器

[root@back ~]# vi /etc/my.cnf
relay_log=relay-log         #開啓中繼日誌
server_id=2                      #配置服務器節點id,全局惟一
innodb_file_per_table=ON          #開啓每表單存儲
skip_name_resolve=ON             #關閉域名反解

6.查看中繼日誌是否開啓架構

MariaDB [mysql]> SHOW GLOBAL VARIABLES LIKE '%relay_log';
+----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| innodb_recovery_update_relay_log | OFF       |
| relay_log                        | relay-log |
| sync_relay_log                   | 0         |
+----------------------------------+-----------+
3 rows in set (0.00 sec)

7.查看server_id分佈式

MariaDB [mysql]> SHOW GLOBAL VARIABLES LIKE '%server_id%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 2     |
+---------------+-------+
1 row in set (0.00 sec)

8.設置主庫位置及其餘信息線程

MariaDB [hellodb]> CHANGE MASTER TO 
    -> MASTER_HOST='172.17.148.255' ,     #主庫地址
    -> MASTER_USER='copy' ,                      #複製用戶
    -> MASTER_PASSWORD='copy' ,           #用戶密碼
    -> MASTER_LOG_FILE='master-bin.000003' ,     #從哪一個二進制文件開始複製
    -> MASTER_LOG_POS=245;                   #複製起始位置

9.開啓複製線程日誌

MariaDB [mysql]> START SLAVE ;

10.查看SLAVE狀態

MariaDB [mysql]> SHOW SLAVE STATUS \G

 11.主庫解鎖

MariaDB [mysql]> UNLOCK TABLES;

 

 

複製架構中應該注意的問題

1.限制從服務器爲只讀 

在從服務器上限制read_only=ON,此限制對擁有super權限的用戶均無效

MariaDB [hellodb]> SET GLOBAL read_only=ON;
Query OK, 0 rows affected (0.00 sec)

MariaDB [hellodb]> SHOW GLOBAL VARIABLES LIKE 'read_only';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| read_only     | ON    |
+---------------+-------+
1 row in set (0.00 sec)  

或是在配置文件中添加此項

[root@back ~]# vi /etc/my.cnf
read_only=ON

2.如何保證主從複製的事務安全

在master節點啓用參數

sync_binlog=ON   #事務提交時,當即將內存中的二進制文件寫入磁盤
sync_master_info=ON     #立刻同步這個文件內容至磁盤
innodb_flush_logs_at_trx_commit=ON   #提交時,當即將日誌寫入磁盤
innodb_support_xa=ON     #支持分佈式  

在slave節點啓用參數

skip_slave_start=ON       #關閉自動提交
sync_relay_log=ON          #文件當即同步至磁盤
sync_relay_log_info=ON    #當即同步至磁盤

  

*若是從庫以前作過複製,須要清空以前的配置

#先中止複製
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

#再清空狀態
mysql> reset slave;
Query OK, 0 rows affected (0.00 sec)

#從新配置
mysql> CHANGE MASTER TO \
    -> MASTER_HOST='10.69.39.73',\
    -> MASTER_USER='copy',\
    -> MASTER_PASSWORD='copy',\
    -> MASTER_LOG_FILE='mysql-bin.000002',\
    -> MASTER_LOG_POS=106;
Query OK, 0 rows affected (0.01 sec)

#開啓複製
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

  

*查看主從狀態

#主庫的Position不能爲0
mysql> SHOW MASTER STATUS \G
*************************** 1. row ***************************
            File: mysql-bin.000002
        Position: 106
    Binlog_Do_DB: gz_namc
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)


#從庫的Slave_IO_Running,Slave_SQL_Running要爲yes

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.69.39.73
                  Master_User: copy
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 106
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

  

*自動刪除以前的二進制日誌

#設置最多保留多長時間以前的日誌
mysql> set GLOBAL expire_logs_days=30;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'expire_logs_days';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 30    |
+------------------+-------+
1 row in set (0.00 sec)
相關文章
相關標籤/搜索