一、原理
写操作时单个数据库操作
1.请求到达数据库程序——写到事务日志中
2.程序读取事务日志——内存,在内存中运行完毕
3.将内存中有关数据的操作——写到二进制日志
4.内存操作——二进制写完之后;通知客户端操作完成
5.(顺序写)将二进制日志的操作——定期刷到磁盘
写操作时主从数据库操作
1.slave_I/O线程请求master二进制日志
2.master_dump线程读取二进制日志给slave_I/O线程
3.slave_I/O线程将接收到的二进制日志写到slave的relay_log(中继日志)
4.slave_sql线程将relay_log运行到内存、写到二进制日志、刷到磁盘
二、步骤分析
1.一主多从+半同步
2.复制限制的设置
三、master配置
1.配置文件
vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
server_id=174
log_bin=/var/lib/mysql/log_bin
skip-name-resolve
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
2.mysql>命令配置
给slave服务器replication权限-创建有replication 权限用户
MariaDB [(none)]> grant replication slave,replication client on *.* to slave@'%' identified by 'slave_passwd';
半同步设置
安装半同步_master模块
mysql>命令
install plugin rpl_semi_sync_master soname 'semisync_master.so';
查看master半同步是否开启
MariaDB [(none)]> show global variables like 'rpl_semi%';
开启master半同步
mysql>命令
set global rpl_semi_sync_master_enabled=1;
四、slave配置
salve的server_id不同
1.配置文件
vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
server_id=175
log_bin=/var/lib/mysql/log_bin
relay_log=/var/lib/mysql/relay_log
read_only=on
log_slave_updates=1
replicate_ignore_db=db1
replicate_ignore_table=db2.table1,db2.table2
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
2.mysql>命令配置
使用master创建的repliction权限用户
change master to master_host='192.168.17.174', master_user='slave', master_password='slave_passwd', master_log_file='log_bin.000001',master_log_pos=412;
开启I/O线程和sql线程
start slave;
半同步设置
安装半同步_slave模块
install plugin rpl_semi_sync_slave soname'semisync_slave.so';
查看master半同步是否开启
show global variables like 'rpl_semi%';
开启slave半同步
set global rpl_semi_sync_slave_enabled=1;
重启I/O线程和sql线程
先stop,再start
stop slave;
start slave;
查看状态
查看从服务器状态
SHOW SLAVE STATUS\G
查看当前复制状态
show processlist \G