1 ) mysql 主从复制 (实时与异步,一主多从,一主一从)
备注:单向策略;主从本身就是一种备份,一般从就用于备份;
主从不一致,解决办法(特别支付类型):
1) 出问题期间的主节点中 bin-log,恢复到备份节点上。
2) 双写主
3) 程序写log的1分钟在内存,主一但宕机
4) 异步改实时
a. 有利于数据库健壮性,提高访问速度,易于管理
b. 可以主从服务器互为备份
c. 读写分离(程序实现,测试环境mysql-proxy,amoeba, 分布式dbproxy)
同步的时候有二个线程完成(IO线程,SQL线程),主从复制依赖binlog
主节点:IO线程
从节点:IO线程,SQL线程(实时监控relay-log)写到数据文件,master_info (bin-log信息)
1) slave节点执行start slave,开启主从开关;
2)此时,slave节点的IO线程会通过在master上授权的复制用户权限请求连接master节点,并请求从指定binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制节点 时执行change master命令时指定的)之后发送binlog日志内容
3) master在接受从节点IO线程请求后,负载读取从节点请求中binlog相关信息,将指定binlog日志发送给从节点;然后从节点更新masterinfo信息,记录binlog位置。
4)slave节点IO线程获取到master的IO发送的日志,将写到relay-log(中继日志),然后从节点sql线程将relay-log写到从节点的数据文件。
主节点/etc/my.cnf配置,从节点log-bin打不打开都可以,最后把server-id分开不要一样即可
log-bin=/data/mysqldb/mysql-bin
server-id = 1
主库
GRANT REPLICATION SLAVE,FILE,RELOAD,SUPER ON *.* TO 'per'@'10.150.100.143' IDENTIFIED BY '123456';
#新建用户给业务使用
grant all privileges on MOVIE_REPORT.* to 'MOVIE_REPORT'@'%' identified by 'MOVIE_REPORT_2o1o';
flush privileges;
#锁表(主节点)
flush tables with read lock;(unlock tables)
#主节点备份
mysqldump -uroot -p123456 -S /usr/local/mysql/mysql.sock -A -B --events|gzip >/opt/rep.sql.gz
#从节点导入
mysql -uroot -p123456 -S /usr/local/mysql/mysql.sock
CHANGE MASTER TO
MASTER_HOST = '10.150.100.144',
MASTER_USER = 'per',
MASTER_PASSWORD = '123456',
MASTER_PORT = 3306,
MASTER_LOG_FILE='mysql-bin.000009',
MASTER_LOG_POS=106;
#启动复制
mysql> start slave;
change master to master_log_file='mysql-bin.000011', master_log_pos=1;
如果从节点这二线程为yes,则为正常(10.150.100.143 从节点)
sql > show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
#查看 bin-log信息
show master status;