目录
〔1〕MySQL主从同步
- 实现数据自动同步的服务机构,自动备份
- 主服务器:接受客户端的访问连接
- 从服务器:自动同步主服务器数据
〔2〕原理
- 主数据库(主库),启用binlog,所有SQL操作记录在日志中,当binlog有新增的日志,则通知从数据库(从库)的IO线程来读取
- IO线程读取主库binlog新增日志写入到本机的中继日志(relay-log)中,SQL线程再从中继日志中读取新增的数据写入到数据库
〔3〕主从同步结构类型
- 一主一从:A<--B
- 一主多从: A<--B A<--C
- 主从从: A<--B<--C
- 互为主从: A<-->B
注意:
-
- 新安装的数据库,随机密码登录后修改密码
- grep password /var/log/mysqld.log //查看随机密码,用该密码登录mysql
- update mysql.user set authentication_string=password("新密码") where user="root" and host="localhost";
- /etc/my.cnf配置文件中设置密码策略0,验证长度为6,便于创建授权用户时设置密码,否则可能出错
- 新安装的数据库,随机密码登录后修改密码
〔4〕一主一从结构构建
- 主库配置
- 启用binlog
- vim /etc/my.conf 添加 log-bin=master51 server_id=51
- systemctl restart mysqld
- 创建授权用户
- 从库连接主库使用
- grant replication slave on *.* to repluser@'%' identified by '123456';
- 客户端测试用户
- grant all on db5.* to userone@'%' identified by '123456';
- 查看binlog日志信息
- 可以看到当前使用的日志名,位置偏移量
- show master status;
- 从库连接主库使用
- 启用binlog
- 从库配置
- 指定从库sever_id
- /etc/my.cnf 添加server_id=52
- systemctl restart mysqld
- 从库与主库数据一致保证
- --master-data 选项作用:记录当前备份数据对应的日志名称以及最新偏移量位置,以便从库知道从主库日志文件中什么位置读取数据
- 主库备份数据,并传给从库
- mysqldump -uroot -p123456 --master-data db5 > db5.sql
- scp db5.sql root@192.168.4.52:
- 从库建库,并导入
- mysql -uroot -p123456 -e "create database db5"
- mysql -uroot -p123456 db5 < db5.sql
- 指定主库信息
- 查看备份文件中主库的日志文件名和位置偏移量
- grep master db5.sql
- 配置信息
- 查看备份文件中主库的日志文件名和位置偏移量
- 指定从库sever_id
mysql>change master to master_host="192.168.4.51", //主库IP地址
master_user="repluser", master_password="123456", //主库授权用户,密码
master_log_file="master51.000001", //主库日志文件
master_log_pos=154; //主库日志位置偏移量
-
-
- 启动从库服务
- start slave;
- 查看slave状态,检查IO和SQL线程是否正常运行
- show slave status;
- 服务启动后,数据库中生成相关文件
- 主库信息:master.info
- 中继日志信息: relay-log.info
- 中继日志: 主机名-relay-bin.xxxxxx
- 索引文件: 主机名-relay-bin.index
- 启动从库服务
-
- 测试用户客户端登录主库,对数据库db5增删改查操作,查看从库同步效果
〔5〕一主多从构建
- 每个从库配置文件配置server_id,重启mysql服务
- 将主库的数据备份并传给所有从库,备份添加选项--master-data
- 每个从库创建对应备份数据的数据库,然后导入
- 查看备份数据文件中的日志名,位置偏移量,grep master db5.sql
- 每个从库都使用change master指定主库信息:ip,user,password,log_file,log_pos
- 启动slave,并检查IO,SQL线程运行状态,确认同步服务正常
- 客户端测试
〔6〕主从从构建
- 新建192.168.4.0网段中53,54,55主机做数据库服务器,53是54的主服务器,54是55的主服务器54是53的从服务器,55是54的从服务器,因此,53只做主服务器,55只做从服务器,54既是做主服务器也做从服务器.此时数据库都是原始的,一样.
- 步骤一:53主机做主服务器
- 启用binlog: vim /etc/my.cnf 添加两行
- og-bin=db53 server_id=53
- systemctl restart mysqld
- 创建授权用户,从库连接主库的授权用户
- grant relication slave on *.* to repluser@'%' identified by '123456';
- 查看当前binlog日志文件名和位置偏移
- show master status; //假如偏移位置为725
- 启用binlog: vim /etc/my.cnf 添加两行
- 步骤二: 54主机做从/主服务器
- 启用binlog: vim /etc/my.cnf 添加三行
- log-bin=db54 server_id=54
- log_slave_updates //允许级联复制
- systemctl restart mysqld
- 创建授权用户,从库连接主库的授权用户
- grant relication slave on *.* to repluser@'%' identified by '123456';
- 指定53主机为主库
- 启用binlog: vim /etc/my.cnf 添加三行
mysql>change master to master_host="192.168.4.53", //主库IP地址
master_user="repluser", master_password="123456", //主库授权用户,密码
master_log_file="master53.000001", //主库日志文件
master_log_pos=725; //主库日志位置偏移量725
-
- 启动服务
- start slave; //起从服务
- show slave status; //查看从服务,检查IO,SQL线程运行是否为YES,不是则排错
- 查看当前binlog日志文件名和位置偏移
- show master status; //假如偏移位置为1410
- 启动服务
- 步骤三: 55主机做从服务器
- 设置server_id : vim /etc/my.cnf 添加一行
- server_id=55
- systemctl restart mysqld
- 指定54主机为主库
- 设置server_id : vim /etc/my.cnf 添加一行
mysql>change master to master_host="192.168.4.54", //主库IP地址
master_user="repluser", master_password="123456", //主库授权用户,密码
master_log_file="master54.000001", //主库日志文件
master_log_pos=1410; //主库日志位置偏移量1410
-
- 启动服务
- start slave; //起从服务
- show slave status; //查看从服务,检查IO,SQL线程运行是否为YES,不是则排错
- 启动服务
- 步骤四: 测试
- 53主机数据库中建库,建表,插入数据,在54,55 数据库中都能查询到数据
〔7〕主从结构数据库数据复制模式
- 异步复制(Asynchronous replication)
- 主库执行完一次事务后,立即将结果返回给客户端,并不关心从库是否接收并处理成功.
- 全同步复制(Fully synchronous replication)
- 主库执行一次事务,需等所有从库都执行该事务后才将结果返回客户端.
- 半同步复制(Semisynchronous replication)
- 主库执行一次事务,至少一个从库执行事务后,写到relay-log中才将结果返回客户端.
〔8〕半同步复制配置
- 查看数据库是否允许动态加载插件模块
- show variables like 'have_dynamic_loading'; //默认允许
- 加载插件模块
- 主服务器半同步复制插件
- install plugin rpl_semi_sync_master SONAME "semisync_master.so";
- 从服务器半同步复制插件
- install plugin rpl_semi_sync_slave SONAME "semisync_slave.so";
- 查看插件激活状态
- select plugin_name,plugin_status from information_schema.plugins
- where plugin_name like "%semi%";
- 查看半同步复制服务启动状态,默认关闭
- show variables like "rpl_semi_sync_%_enabled";
- 启动半同步复制服务,临时设置,马上生效
- set global rpl_semi_sync_master_enabled=1;
- set global rpl_semi_sync_slave_enabled=1;
- 主服务器半同步复制插件
- 永久启动半同步复制服务
- 修改/etc/my.cnf
- 只做主服务器,则添加主服务器半同步复制插件
- plugin-load="rpl_semi_sync_master=semisync_master.so"
- rpl_semi_sync_master_enabled=1
- 只做从服务器,则添加从服务器半同步复制插件
- plugin-load="rpl_semi_sync_slave=semisync_slave.so"
- rpl_semi_sync_slave_enabled=1
- 既做主又做从的服务器,两种插件都添加
- plugin-load="pl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
- rpl_semi_sync_master_enabled=1
- rpl_semi_sync_slave_enabled=1