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]下。