博客网站登录,网络公司名字大全简单好听,网站设计软件下载,百度公司网站制作一、简介
MySQL内建的复制功能是构建大型#xff0c;高性能应用程序的基础 通过将MySQL的某一台主机#xff08;master#xff09;的数据复制到其他主机#xff08;slaves#xff09;上#xff0c;并重新执行一遍来执行 复制过程中一台服务器充当主服务器#xff0c;而…一、简介
MySQL内建的复制功能是构建大型高性能应用程序的基础 通过将MySQL的某一台主机master的数据复制到其他主机slaves上并重新执行一遍来执行 复制过程中一台服务器充当主服务器而其他一个或多个其他服务器充当从服务器
1.1主从复制原理
主要基于MySQL二进制日志 主要包括三个线程2个I/O线程1个SQL线程
LNMPcentos7mysql5.6
vmware workstation pro配置了3个虚拟机均安装了LNMP环境
master 192.168.0.105
slave 192.168.0.106 、192.168.0.107 二、原理
1主数据库master进行增删改操作后相应操作记录的语句比如 create database test会记录到binlog日志文件中binlog日志文件一般和数据库data文件夹在一起。
2从数据库Slave会请求主数据库的binlog日志文件拷贝到Slave的中继日志中然后在自己的从数据库上自动执行相同的操作语句进而实现主从的同步。
注这里我们所需要配置的只是主从环境以及开启binlog日志其他的mysql会自动完成。 二、配置主从同步
2.1环境准备
克隆三台没有下过mysql的虚拟机或恢复快照
ip为 master 192.168.1.112 slave1 192.168.1.113 slave2 192.168.1.114
下载mysqlyum install mysql-server -y
不会下载或者下载报错MySQL数据库安装---离线下载_mysql 离线下载安装-CSDN博客
2.2主从配置
2.2.1【master】主服务器
1.选举112为主服务器
vim /etc/my.cnf[client]
userroot
passwordABc1234[mysqld]
datadir/var/lib/mysql
socket/var/lib/mysql/mysql.socklog-error/var/log/mysqld. log
pid-file/var/run/mysqld/mysqld.pidserver_id11 #可以是任意正整数一般比slave大
然后开启MySQL服务 2.在数据库中创建用户以及授权修改master库的密码加密方式
repl 你所创建的用户名
MySQL123 用户密码
mysql create user repl%identified with mysql_native_password by MySQL123- ;
Query OK, 0 rows affected (0.00 sec)mysql grant replication slave on *.* to repl%;
Query OK, 0 rows affected (0.00 sec)查看主配置状态show master status; 3 关闭防火墙禁用SElinux
[rootopeneuler-1 ~] systemctl stop firewalld[rootopeneuler-1 ~] setenforce 0
setenforce: SELinux is disabled #已被禁用[rootopeneuler-1 ~] getenforce #查看SElinux状态
Disabled2.2.2【slave】从服务器
【slave1】和【slave2】
1.配置主配置文件添加一个server_id唯一标识
vim /etc/my.cnf
slave1的 113slave2的 114 配置后开启/重启mysql服务systemctl start mysql.service/systemctl restart mysql.service 2.在从mysql上进行部署连接主库因为连接的是同一个主库两个slave操作一样
ps如果start slave后要重新连接主库change maste to), 必须先stop slave 从库指向主库创建的host用户名密码二进制文件以及节点
mysql change master to- master_host192.168.1.112,- master_userrepl,- master_passwordMySQL123,- master_log_filebinlog.000001,- master_log_pos980;
Query OK, 0 rows affected, 8 warnings (0.01 sec) 3.开启主从
mysql start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
4.) 关闭防火墙禁用SElinux
[rootopeneuler-1 ~] systemctl stop firewalld[rootopeneuler-1 ~] setenforce 0
setenforce: SELinux is disabled #已被禁用[rootopeneuler-1 ~] getenforce #查看SElinux状态
Disabled5.) 查看是否成功并测试 三、基于binlog的主从同步
3.1【主服务器】
1.) 开启binlog
在id后面添加两行
[rootopeneuler-1 Mysql]# vim /etc/my.cnfserver_id11gtid_modeON
enforce-gtid-consistencyON[rootopeneuler-1 Mysql]# systemctl restart mysqld.service3.2【从服务器】
1.暂停slave进入配置文件添加两行重启服务重启更改后的配置才会生效
mysql stop slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)mysql \q
Bye[rootopeneuler-1 Mysql]# vim /etc/my.cnfserver_id113gtid_modeON
enforce-gtid-consistencyON[rootopeneuler-1 Mysql]# systemctl restart mysqld.service
2.测试gid是否开启
mysql show variables like %gtid%; 3. 暂停slave连接主库
mysql stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql change master to- master_host192.168.1.112,- master_userrepl,- master_passwordMySQL123,- master_auto_position1; #使用 GTID 自动定位。
Query OK, 0 rows affected, 7 warnings (0.00 sec)mysql start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)
3.3 GTID 从库误写入操作处理
从库一般是不需要写入数据的如果不小心写入一般会报错
Last_SQL_Error: Error Cant create database db4; database exists on query. Default database: db4. Query: create database db4
Retrieved_Gtid_Set: 71bfa52e-4aae-11e9-ab8c-000c293b577e:1-3 #说明gid3报错Executed_Gtid_Set: 71bfa52e-4aae-11e9-ab8c-000c293b577e:1-2,7ca4a2b7-4aae-11e9-859d-000c298720f6:1
解决方法注入空事务
暂停salve
stop slave;#3是报错的ID号
set gtid_next99279e1e-61b7-11e9-a9fc-000c2928f5dd:3;
begin;commit;
set gtid_nextAUTOMATIC;这里的xxxxx:N 也就是你的slave sql thread报错的GTID或者说是你想要跳过的GTID。最好的解决方案重新构建主从环境
3.4 IO进程错误
发现IO进程错误检查日志排除故障
tail localhost.localdomain.err 常见错误各个复制的虚拟机server_id不能相同
解决方法修改id重启mysql 四、延时同步
4.1简介
是我们人为配置的一种特殊同步从库和主库同步延时N小时
为什么要有延时同步 数据库有两种故障 物理损坏可以用主从复制解决。主库rm删除直接将应用切换到从库 逻辑损坏普通主从同步无法解决。eg主库drop database ns从库也没了
4.2配置延时同步
主库加一个参数即可其他不变 change master to master_delay300; #延时300s
4.3故障模拟恢复 1.主库数据操作
mysql stop slave;
Query Ok, 0 rows affected, l warning(0.00 sec)mysal change master to master_delay300; #延时300s
Query OK, 0 rows affected, 2 warnings (0.0l sec)mysql start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)mysq1 show slave status \G
SQL_Delay: 300
SQL_Remaining_Delay: NULL 2.停止从库SQL线程
stop slave sql_thread;
3.) 找relaylog的截取点和终点
起点 Relay_Log_File:db01-relay-bin.000002 Relay_Log_Pos:482
终点 4.) 从库恢复relaylog
source /tmp/relay.sq1
5.) 从库身份解除
db0l [relay]stop slave ;
db0l [relay]reset slave all