上一篇是分享的是《OpenJDK》,这篇给大家分享《MySQL主从复制》。
目录:
MySQL主从复制
MySQL主从复制过程
MySQL多实例数据库搭建
MySQL多实例数据库启动与敞开
MySQL一主多从架构
MySQL双主双从配置开启二进制日志
MySQL一主多从环境重启及MySQL双主双从数据复制验证
MySQL多实例数据库配置
MySQL双主双从重置主从状态
MySQL主从复制
若数据库仅有一台服务器,那么单点问题比拟容易产生,若服务器拜访响应者解体,那么服务器就不能应用了,若硬盘坏了,则整个数据就失落了,将是一个重大的安全事故。
想要防止数据的失落,最起码筹备两台或多台的服务器,经数据多分复制部署不同服务器上,若某一台呈现故障,则其余服务器提供工作。
MySQL提供了主从复制性能以进步服务的可用性与数据的平安可靠性;
主从复制是指服务器分为主服务器和从服务器,主服务器负责读和写,从服务器只负责读,主从复制也叫 master/slave,master是主,slave是从;
MySQL主从复制架构
MySQL一主多从架构
MySQL双主双从架构
MySQL主从复制过程
如果探测到 master 主服务器的二进制日志产生了扭转,则开始呈现一个 I/O Thread 申请 master 二进制日志;
同时 master 主服务器为每个人 I/O Thread 启动一个dump Thread,用于向其发送二进制日志;
slave 服务器将接管到的二进制日志保留至本人本地的中继日志文件中;
salve 从服务器将启动 SQL Thread 从中继日志中读取二进制日志,在本地重放,使得其数据和主服务器保持一致;
最初 I/O Thread 和 SQL Thread 将进入睡眠状态,期待下一次被唤醒;
MySQL主从复制原理图:
MySQL多实例数据库搭建
1、在MySQL装置主目录下创立/data/3307, /data/3308, /data/3309, /data/3310四个目录;
2、执行数据库初始化,在MySQL的/usr/local/mysql-5.7.18/bin目录下执行命令:
./mysqld --initialize-insecure --basedir=/usr/local/mysql-5.7.18 --datadir=/usr/local/mysql-5.7.18/data/3307 --user=mysql./mysqld --initialize-insecure --basedir=/usr/local/mysql-5.7.18 --datadir=/usr/local/mysql-5.7.18/data/3308 --user=mysql./mysqld --initialize-insecure --basedir=/usr/local/mysql-5.7.18 --datadir=/usr/local/mysql-5.7.18/data/3309 --user=mysql./mysqld --initialize-insecure --basedir=/usr/local/mysql-5.7.18 --datadir=/usr/local/mysql-5.7.18/data/3310 --user=mysql
其中 initialize-insecure 示意不生成MySQL数据库root用户的随机明码,即root明码为空;
3、在/data/3307, /data/3308, /data/3309, /data/3310 四个目录下别离创立一个my.cnf文件;
4、配置四个MySQL数据库服务的my.cnf文件
[client]port = 3307socket = /usr/local/mysql-5.7.18/data/3307/mysql.sockdefault-character-set=utf8[mysqld]port = 3307socket = /usr/local/mysql-5.7.18/data/3307/mysql.sockdatadir = /usr/local/mysql-5.7.18/data/3307log-error = /usr/local/mysql-5.7.18/data/3307/error.logpid-file = /usr/local/mysql-5.7.18/data/3307/mysql.pidcharacter-set-server=utf8lower_case_table_names=1autocommit = 1
至此多数据库实例就搭建好了;
MySQL多实例数据库启动与敞开
MySQL多实例数据库启动
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3307/my.cnf &./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3308/my.cnf &./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3309/my.cnf &./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3310/my.cnf &
其中 --defaults-file 是指定配置文件,& 合乎示意后盾启动;
MySQL多实例数据库敞开
切换到/usr/local/mysql-5.7.18/bin目录下,应用 mysqladmin 命令 shutdown
形式一:
./mysqladmin -uroot -p -S /usr/local/mysql-5.7.18/data/3307/mysql.sock shutdown
形式二:
./mysqladmin -uroot -p -P3307 -h127.0.0.1 shutdown
形式三: 如果曾经进入到了MySQL的命令行,能够间接执行 shutdown;
退出MySQL命令行,执行: exit
MySQL一主多从架构
主(3307)外面退出
log-bin=mysql-bin #示意启用二进制日志
server-id=3307 #示意server编号,编号要惟一
从(3308)外面退出
server-id=3308 #示意server编号,编号要惟一
从(3309)外面退出
server-id=3309 #示意server编号,编号要惟一
从(3310)外面退出
server-id=3310 #示意server编号,编号要惟一
MySQL一主多从环境重启
进入/usr/local/mysql-5.7.18/bin目录,重启四个MySQL服务,启动时指定配置文件启动:
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3307/my.cnf &./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3308/my.cnf &./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3309/my.cnf &./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3310/my.cnf &
MySQL一主多从设置主从关系
1、在主服务器上创立复制数据的账号并受权:
grant replication slave on . to 'copy'@'%' identified by '123456';
2、倡议重置一下主服务状态,执行命令:reset master;
3、在主服务器上执行命令,获取主服务器二进制binlog文件名及坐标(二进制文件名和坐标值在前面会用到):
show master status;
在从服务器上执行命令,设置从服务器的master
4、重置一下从的状态:(在重置之前能够查看一下从的状态: show slave status)
stop slave;
reset slave;
5、change master to master_host='192.168.199.128',master_user='copy',
master_port=3307,master_password='123456',
master_log_file='mysql-bin.000001',master_log_pos=154;
6、再从机器上执行开始复制命令:start slave; (作用:启动IO线程和SQL线程)
MySQL一主多从数据复制验证
查看从服务器复制性能状态
mysql> show slave status \G
Slave_IO_Running和Slave_SQL_Running为YES,就是失常状态。
在主服务器上创立数据库、表、数据,而后在从服务器上查看是否曾经复制
以上操作过程显示失常,则主从服务器配置实现;
查看主从复制binlog日志文件内容:show binlog events in 'mysql-bin.000001';
MySQL双主双从配置开启二进制日志
主master 3307 ---> 从slave 3309
主master 3308 ---> 从slave 3310
3307 <---> 3308 互为主从
2个写节点,每个写节点下又是2个读节点;
MySQL双主双从配置开启二进制日志
1、配置每一台MySQL服务器的配置文件my.cnf
3307
3308
3309
3310
2、与一主多从一样,所有主服务器配置文件加上binlog配置
3307
3308
3309
3310
log-bin=mysql-bin
server-id=实例的端口(server-id要惟一)
3、第一台主服务器3307的my.cnf文件减少如下配置:(Master 3307)
auto_increment_increment=2auto_increment_offset=1log-slave-updatessync_binlog=1
4、第二台主服务器3308的my.cnf文件减少如下配置:(Master 3308)
auto_increment_increment=2auto_increment_offset=2log-slave-updatessync_binlog=1
配置项阐明
auto_increment_increment,管制主键自增的自增步长,用于避免Master与Master之间复制呈现反复自增字段值,通常auto_increment_increment=n,有多少台主服务器,n 就设置为多少;
auto_increment_offset=1设置自增起始值,这里设置为1,这样Master的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID
留神auto_increment_offset的设置,不同的master设置不应该一样,否则就容易引起主键抵触,比方master1的offset=1,则master2的offset=2,master3的offset=3
在双主模式中,log-slave-updates 配置项肯定要配置,否则在master1(3307)上进行了更新数据,在master2(3308)和slave1(3309)上会更新,然而在slave2(3310)上不会更新
sync_binlog示意每几次事务提交,MySQL把binlog缓存刷进日志文件中,默认是0,最平安的是设置为1;
MySQL一主多从环境重启及MySQL双主双从数据复制验证
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3307/my.cnf &./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3308/my.cnf &./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3309/my.cnf &./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3310/my.cnf &
MySQL双主双从数据复制验证
查看从服务器复制性能状态,执行命令:
mysql> show slave status \G
如果Slave_IO_Running和Slave_SQL_Running的值为Yes,即示意复制性能配置失常;
设置好双主双从复制后:
- 一个主呈现问题,能够切换到另外的主进行写数据,新主同步数据给它的从;
- 待问题旧主复原服务后,新的主会同步数据给它,它再同步数据给本人的从,这样不会呈现数据的不同步和服务的不可用。
MySQL多实例数据库配置
其中 -p 是指定明码,如果没有明码则能够不写 -p,-S是指定sock文件,mysql.sock文件是服务器与本机客户端进行通信的ip与端口文件;
或者应用用端口、主机登录 ./mysql -uroot -p -P3307 -h127.0.0.1 登录进入MySQL
2、批改mysql的明码,执行:
alter user 'root'@'localhost' identified by '123456';(其中123456是咱们设置的明码)
3、受权近程拜访,执行命令:(这样近程客户端能力拜访)
grant all privileges on . to root@'%' identified by '123456';
其中. 的第一个示意所有数据库名,第二个示意所有的数据库表;
root@'%' 中的root示意用户名,%示意ip地址,%也能够指定具体的ip地址,比方root@localhost,root@192.168.10.129
4、执行以下如下命令刷新权限:
flush privileges;
以上步骤一次性执行:
alter user 'root'@'localhost' identified by '123456';
grant all privileges on . to root@'%' identified by '123456';
flush privileges;
MySQL双主双从重置主从状态
./mysql -uroot -p -P3307 -h127.0.0.1./mysql -uroot -p -P3308 -h127.0.0.1
在主服务器上创立复制数据的账号并受权:
grant replication slave on . to 'copy'@'%' identified by '123456';
2、在两台主服务器上进行复制并刷新binlog日志,也就是重置一下服务的状态:(3307、3308)
在MySQL命令行执行:
stop slave; --进行复制
reset slave; --重置从服务器的状态,把它变成初始状态
reset master; --重置主服务器的状态,把它变成初始状态
3307机器执行:
reset master
3308机器执行:
stop slave;
reset slave;
reset master;
3、在从服务器上进行复制:(3309、3310)
在MySQL命令行执行:
stop slave;
reset slave;
4、在主服务器上查看二进制日志文件和Position值:(3307、3308)
在MySQL命令行执行:
即在3307和3308上别离执行:show master status;
5、在从服务器Slave上设置Master(相当于是4台都须要设置)
设置从服务器3308、3309,他们的主均为3307,即在3308和3309上执行如下操作:
change master to master_host='192.168.199.128',master_user='copy',master_password='123456',master_port=3307,master_log_file='mysql-bin.000001',master_log_pos=154;
设置从服务器3307、3310,他们的主均为3308,即在3307和3310上执行如下操作:
change master to master_host='192.168.199.128',master_user='copy',master_password='123456',master_port=3308,master_log_file='mysql-bin.000001',master_log_pos=154;
6、在四台MySQL服务器上执行:start slave; (MySQL命令行执行)
执行后即开始进入主从复制状态
- 以上就是《MySQL主从复制》的分享。
- 也欢送大家交换探讨,该文章若有不正确的中央,心愿大家多多包涵。
- 你们的反对就是我最大的能源,如果对大家有帮忙给个赞哦~~~