实现数据自动同步的服务结构
主服务器(master): 接受客户端访问连接
从服务器(slave):自动同步主服务器数据
Maste:启用binlog 日志Slave:Slave_IO: 复制master主机binlog 日志文件的SQL命令到本机的relay-log(中继日志) 文件里.Slave_SQL: 执行本机 relay-log(中继日志) 文件里的SQL语句,实现与 Master 数据一致.
①.>>开启binlog日志,记录所有除查询以外的SQL命令
基本应用单向复制:一主 <—— 一从扩展应用一主多从:从 从链式复制:主 <—— 从 <—— 从互为主从:主 主
[root@host51 ~]# mysql -uroot -p123qqq...A
mysql> drop database bbsdb;
[root@host52 ~]# mysql -uroot -p123qqq...A
mysql> drop database db4;
# 修改主配置文件,开启binlog日志
[root@host51 ~]# vim /etc/my.cnf
[mysqld]
#binlog_format="mixed"# 加上注释
server_id=50#指定id号,默认与IP地址的主机位相同
log_bin=master51#指定binlog日志名,日志文件在/var/lib/mysql下
[root@host51 ~]# systemctl restart mysqld
# 用户授权,给replication slave复制数据的权限,授权用户为: repluser
[root@host51 ~]# mysql -uroot -p123qqq...A
mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A";
mysql> show master status;
# 修改主配置文件,指定server_id号
[root@host52 ~]# vim /etc/my.cnf
[mysqld]
server_id=52 #指定id号,默认与IP地址的主机位相同
[root@host52 ~]# systemctl restart mysqld
# 指定主服务器信息
mysql> change master to master_host="192.16⑧④51", master_user="repluser", master_password="123qqq...A", master_log_file="master51.000001", master_log_pos=441;
mysql> start slave;
mysql> show slave status\G;#确认IO线程、SQL线程都是 Yes 状态
这是因,auto.cnf 存放的是主服务器的uuid号 ,因为是克隆出的虚拟机,uuid号都一样,会进行冲突,可以任意修改其中一个或多个字符,重启数据库服务即可
[root@host52 ~]# vim /var/lib/mysql/auto.cnf
[auto]
server-uuid=d45877cc-f4ab-11ea-b2a1-000c291f7055
[root@host52 ~]# systemctl restart mysqld
[root@host51 ~]# mysql -uroot -p'123qqq...A'
mysql> create database db1;
mysql> create table db1.user (name char(10));
mysql> insert into db1.user values("tom");
[root@host52 ~]# mysql -uroot -p'123qqq...A'
mysql> show databases;
mysql> select * from db1.user;
[root@host52 ~]# cat /var/lib/mysql/master.info
# host52-relay-bin.000001 是中继日志文件:记录从主服务器拷贝过来的sql命令
# host52-relay-bin.index 是中继日志索引文件
[root@host52 ~]# ls /var/lib/mysql/host52*
# 查看中继日志文件内容
[root@host52 ~]# cd /var/lib/mysql
[root@host52 mysql]# cat relay-log.info
7
./host52-relay-bin.000004#本机正在使用的中继日志文件
319#中继日志记录主服务器sql命令的偏移量
master51.000001#中继日志从哪个文件中拷贝sql命令(主服务器)
441 #此为主服务器最近的binlog日志的偏移量
# 查看中继日志索引文件,有几个中继日志文件,就记录几条
[root@host52 ~]# cd /var/lib/mysql
[root@host52 mysql]# cat host52-relay-bin.index
[root@host53 ~]# mysql -uroot -p123qqq...A
mysql> show databases;
mysql> drop database db4;
[root@host52 ~]# scp libev-④15-1.el⑥rf.x86_6④rpm percona-xtrabackup-24-2.④7-1.el⑦x86_6④rpm 192.16⑧④51:/root/
[root@host51 ~]# rpm -ivh libev-④15-1.el⑥rf.x86_6④rpm
[root@host51 ~]# yum -y install percona-xtrabackup-24-2.④7-1.el⑦x86_6④rpm
[root@host51 ~]# innobackupex --user root --password '123qqq...A' --slave-info /allbak1 --no-timestamp
[root@host51 ~]# scp -r /allbak1/ 192.16⑧④53:/opt/
[root@host53 ~]# systemctl stop mysqld
[root@host53 ~]# rm -rf /var/lib/mysql/*
[root@host53 ~]# innobackupex --apply-log /root/allbak1/#准备恢复数据
[root@host53 ~]# innobackupex --copy-back /root/allbak1/#恢复数据
[root@host53 ~]# chown -R mysql:mysql /var/lib/mysql
[root@host53 ~]# systemctl start mysqld
[root@host53 ~]# mysql -uroot -p'123qqq...A' -e "show databases"
# xtrabackup_binlog_info 文件记录的是binlog日志文件名和偏移量
# 此偏移量和主服务器的偏移量一致,从服务器同步数据时从这个偏移量开始同步
# 可以查看host51的binlog日志状态,偏移量相同
[root@host53 ~]# cat /opt/alldb/xtrabackup_binlog_info
master51.0000011020
# 修改主配置文件,指定server_id号
[root@host53 ~]# vim /etc/my.cnf
[mysqld]
server_id=53#指定id号,默认与IP地址的主机位相同
[root@host53 ~]# vim /var/lib/mysql/auto.cnf
[auto]
server-uuid=d45877cc-ffab-11ea-b2a1-000c291f7055
[root@host53 ~]# systemctl restart mysqld
[root@host53 ~]# mysql -uroot -p123qqq...A
mysql> change master to master_host="192.16⑧④51", master_user="repluser", master_password="123qqq...A", master_log_file="master51.000001", master_log_pos=1020;
mysql> start slave;#启动slave
mysql> show slave status;#查看从服务器状态信息
host51:插入数据
[root@host51 ~]# mysql -uroot -p'123qqq...A'
mysql> insert into db1.user values("tomA"),("tomB"),("tomC");
[root@host53 ~]# mysql -uroot -p'123qqq...A'
mysql> select * from db1.user;
第二段:MYSQL主从从结构
主服务器 主机名:host53 IP地址: 192.16⑧④53
从服务器 主机名:host54 IP地址: 192.16⑧④54
从服务器 主机名:host55 IP地址: 192.16⑧④55
[root@host53 ~]# cd /var/lib/mysql
[root@host53 mysql]# rm -rf master.info #删除连接主服务器的信息文件
[root@host53 mysql]# rm -rf host53-relay-bin.0*#删除所有的中继日志文件,存放从主服务器拷贝过来的sql命令
[root@host53 mysql]# rm -rf host53-relay-bin.index #删除中继日志的索引文件,按顺序记录所有的中继日志文件名
[root@host53 mysql]# rm -rf relay-log.info #删除中继日志文件,记录中继日志信息
[root@host53 mysql]# systemctl restart mysqld
[root@host53 ~]# mysql -uroot -p'123qqq...A'
mysql> show slave status;#查看从服务器状态信息,为Empty,已经还原
mysql> drop database db1;#删除db1库
mysql> exit
修改主配置文件,开启binlog日志
[root@host53 ~]# vim /etc/my.cnf
[mysqld]
server_id=53
log_bin=master53
[root@host53 ~]# systemctl restart mysqld
[root@host53 ~]# mysql -uroot -p123qqq...A
mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A";
mysql> select user,host from mysql.user;
mysql> show grants for repluser@"%";
mysql> show master status;
[root@host54 ~]# vim /etc/my.cnf
[mysqld]
#binlog_format="mixed"
server_id=54
log_bin=master54
log_slave_updates#允许级联复制
[root@host54 ~]# vim /var/lib/mysql/auto.cnf# auto.cnf 存放的是主服务器的uuid号 因为是克隆出的虚拟机,uuid号都一样,会冲突可以任意修改其中一个或多个字符,重启数据库服务即可
[auto]
server-uuid=d45877cc-f4ab-12ea-b2a1-000c291f7055
[root@host54 ~]# systemctl restart mysqld
[root@host54 ~]# mysql -uroot -p123qqq...A
mysql> change master to master_host="192.16⑧④53", master_user="repluser", master_password="123qqq...A",master_log_file="master5③000001",master_log_pos=154;
mysql> start slave;
mysql> show slave status\G;
mysql> grant replication slave on *.* to jim@"%" identified by "123qqq...A";
mysql> show master status;
[root@host55 ~]# vim /etc/my.cnf
[mysqld]
#binlog_format="mixed"
server_id=55
[root@host55 ~]# vim /var/lib/mysql/auto.cnf
[auto]
server-uuid=d45877cc-f4ab-12ea-b2a1-000c291f7055
[root@host55 ~]# systemctl restart mysqld
[root@host55 ~]# mysql -uroot -p123qqq...A
mysql> change master to master_host="192.16⑧④54",master_user="jim", master_password="123qqq...A",master_log_file="master5④000001",master_log_pos=1554;
mysql> start slave;
mysql> show slave status\G;
[root@host53 ~]# mysql -uroot -p'123qqq...A'
mysql> create database bbsdb;
mysql> create table bbsdb.user(name char(11));
mysql> insert into bbsdb.user values("bob");
mysql> select * from bbsdb.user;
[root@host54 ~]# mysql -uroot -p'123qqq...A'
mysql> select * from bbsdb.user;
[root@host55 ~]# mysql -uroot -p'123qqq...A'
mysql> select * from bbsdb.user;
优点:主服务器宕机后,至少有一台从服务器拥有和主服务器相同的数据,数据安全度高;缺点:响应速度下降,用户体验度下降;
配置半同步复制 (主从服务器都要配置)
主服务器 主机名:host53 IP地址: 192.16⑧④53
从服务器 主机名:host54 IP地址: 192.16⑧④54
从服务器 主机名:host55 IP地址: 192.16⑧④55
host53主服务器命令行加载半同步复制的master模块
mysql> show databases;
mysql> desc information_schema.PLUGINS;#查看默认库information_schema 下PLUGINS表(模块表)的表结构
加载 master 模块,rpl_semi_sync_master模块类型,semisync_master.so模块名称
mysql> install plugin rpl_semi_sync_master SONAME "semisync_master.so";
mysql> select PLUGIN_NAME,PLUGIN_STATUS from information_schema.PLUGINS where PLUGIN_NAME like "%semi%";
mysql> install plugin rpl_semi_sync_slave SONAME "semisync_slave.so";
host54因为是即做主又做从,所以要安装 matser和slave模块
mysql> install plugin rpl_semi_sync_master SONAME "semisync_master.so";
mysql> install plugin rpl_semi_sync_slave SONAME "semisync_slave.so";
mysql> select PLUGIN_NAME,PLUGIN_STATUS from information_schema.PLUGINS where PLUGIN_NAME like "%semi%";
host53:模糊查询半同步复制模块是否开启
mysql> show variables like "%semi%";
mysql> set global rpl_semi_sync_master_enabled=1;#全局设置,开启半同步复制模块
mysql> show variables like "%semi%";#on开启
mysql> set global rpl_semi_sync_master_enabled=1;
mysql> set global rpl_semi_sync_slave_enabled=1;
mysql> show variables like "%semi%";
mysql> set global rpl_semi_sync_slave_enabled=1;
mysql> show variables like "%semi%";
[root@host53 ~]# vim /etc/my.cnf
[mysqld]
plugin-load=rpl_semi_sync_master=semisync_master.so #加载master模块
rpl_semi_sync_master_enabled=1 #启用master模块
[root@host53 ~]# systemctl restart mysqld
[root@host54 ~]# mysql -uroot -p'123qqq...A'
mysql> show variables like "%semi%";
[root@host54 ~]# vim /etc/my.cnf
[mysqld]
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" #同时加载master和slave模块
rpl_semi_sync_master_enabled=1#启用master模块
rpl_semi_sync_slave_enabled=1#启用slave模块
[root@host54 ~]# systemctl restart mysqld
[root@host54 ~]# mysql -uroot -p'123qqq...A'
mysql> show variables like "%semi%";
[root@host55 ~]# vim /etc/my.cnf
[mysqld]
plugin-load=rpl_semi_sync_slave=semisync_slave.so #加载master模块
rpl_semi_sync_slave_enabled=1 #启用master模块
[root@host55 ~]# systemctl restart mysqld
[root@host55 ~]# mysql -uroot -p'123qqq...A'
mysql> show variables like '%semi%';
以上就是土嘎嘎小编大虾米为大家整理的相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!