45、mysql主從複製應用擴充套件
mysql主從複製應用擴充套件
1.主從伺服器的時間要同步(NTP)
建立一個時間伺服器
*/5 * * * * /user/sbin/ntpdate ntpserver &> /dev/null
2.如何限制從伺服器只讀(配置在mysqld中)
在從伺服器上啟動read-only=ON
注意:僅能限制那不具有super許可權的使用者無法執行寫操作,root的使用者不受限
從伺服器
SHOW GLOBAL VARIABLES LIKE '%read_only%';
主伺服器
use mysql
GRANT ALL ON mydb.* TO 'testuser'@'192.168.130.%' IDENTIFIED BY 'testpass';
SELECT User,Host,Password FROM user;
mysql -utestuser -h192.168.130.62 -p
use mydb;
MariaDB [mydb]> CREATE TABLE t1;
ERROR 1290 (HY000): The MariaDB server is running with the --read-only option so it cannot execute this statement
想限制所有使用者,啟用screen在裡面執行
FLUSH TABLES WITH READ LOCK;
3.如何主從複製時的事務安全?(在)
sync_binlog=1 (每當有事務提交時,立即將與二進位制日誌緩衝區中的內容同步到二進位制日誌檔案)
4.半同步複製
主伺服器發起任何寫操作時,這些寫操作必須寫到二進位制日誌中,並通知給從伺服器。從伺服器必須在本地完成資料修改然後反饋主伺服器寫操作已完成,主伺服器再返饋前端OK。
多個從找一個反映最快的來響應,為了確保主從的資料一致。
/usr/local/mysql/lib/plugin/semisync_master.so 在主伺服器上安裝
/usr/local/mysql/lib/plugin/semisync_slave.so
主伺服器
mysql
INSTALL PLUGIN RPL_SEMI_SYNC_MASTER SONAME 'semisync_master.so';
SHOW GLOBAL VARIABLES LIKE '%semi%';
+------------------------------------+--------------+
| Variable_name | Value |
+------------------------------------+--------------+
| rpl_semi_sync_master_enabled | OFF | 是否啟動半同步功能
| rpl_semi_sync_master_timeout | 10000 | 連線從節點的超時時間
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave | ON | 是否檢測半同步從節點上線
| rpl_semi_sync_master_wait_point | AFTER_COMMIT |
+------------------------------------+--------------+
SET GLOBAL rpl_semi_sync_master_enabled = ON;
SET GLOBAL rpl_semi_sync_master_timeout = 10000;
從伺服器
mysql
INSTALL PLUGIN RPL_SEMI_SYNC_SLAVE SONAME 'semisync_slave.so';
SHOW GLOBAL VARIABLES LIKE '%semi%';
SET global rpl_semi_sync_slave_enabled = ON
STOP SLAVE io_therad;
START SLAVE io_therad;
在主伺服器驗證半同步
SHOW GLOBAL STATUS LIKE '%semi%';
解除安裝外掛:
INSTALL PLUGIN plugin_name SONAME 'shared_library_name'
UNINSTALL PLUGIN plugin_name
半同步複製一旦某次等待超時,會自動降級為非同步
5、複製過濾器(僅複製主伺服器部分資料):
可以在主伺服器上過濾也可以在從伺服器上過濾,考慮的及時點還原問題,一般在從伺服器上做過濾。
master上做過濾:
binlog_do_db=(白名單)
binlog_ignore_db=(黑名單)
slave上做過濾
replicate_do_db=(資料庫白名單)
replicate_ignore_db=(資料庫黑名單)
replicate_do_table= db_name.table_name (資料庫白名單)
replicate_ignore_db= db_name.table_name (資料庫黑名單)
使用正則表示式
replicate_wild_do_table=
replicate_wild_igonre_table=
想配置永久有效,將其配置到my.cnf的[mysqld]下。