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)