一、主从复制的原理
1.主从形式
- mysql主从复制 灵活
- mysql基于gtid的主从复制
- mysql基于gtid的半同步主从复制
2.用途及条件
mysql主从复制用途
- 实时灾备,用于故障切换
- 读写分离,提供查询服务
- 备份,避免影响业务
主从部署必要条件:
- 主库开启binlog日志(设置log-bin参数)
- 主从server-id不同
- 从库服务器能连通主库
3.主从原理
从库生成两个线程,一个I/O线程,一个SQL线程;
i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
二.部署
环境:
- 虚拟机server1:master数据库
- 虚拟机server2:slave数据库
-
软件:mysql-5.7.24-1.el7.x86_64 ==> 点击下载
1.sever1:master节点
将软件使用scp传到server1和server2
安装mysql软件
yum install mysql-community-common-5.7.24-1.el7.x86_64.rpm
mysql-community-client-5.7.24-1.el7.x86_64.rpm
mysql-community-libs-5.7.24-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm
mysql-community-server-5.7.24-1.el7.x86_64.rpm -y
然后修改数据库设置文件
vim /etc/my.cnf ##添加下面的语句
log-bin=mysql-bin
server-id=1
然后开启数据库软件
systemctl start mysqld
cat /var/log/mysqld.log | grep password ##查看数据库的初始密码
mysql_secure_installation ##安全初始化,密码要复杂些,我设置的密码是Mysql1994.
进入数据库设置为master节点
mysql -pMysql1994.
mysql> grant replication slave on *.* to repl@'172.25.1.%' identified by 'Mysql1994.';
mysql> Flush privileges;
mysql> show master status;
如上,master节点就设置好了
2.sever2:slave节点
安装mysql软件
yum install mysql-community-common-5.7.24-1.el7.x86_64.rpm
mysql-community-client-5.7.24-1.el7.x86_64.rpm
mysql-community-libs-5.7.24-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm
mysql-community-server-5.7.24-1.el7.x86_64.rpm -y
然后修改数据库设置文件
vim /etc/my.cnf ##添加下面的语句
server-id=2
然后开启数据库软件
systemctl start mysqld
cat /var/log/mysqld.log | grep password ##查看数据库的初始密码
mysql_secure_installation ##安全初始化,密码要复杂些,我设置的密码是Mysql1994.
先测试以下远程用户是否可以登陆
进入数据库设置为slave节点
mysql -pMysql1994.
mysql> change master to master_host='172.25.1.5',
master_user='repl',
master_password='Mysql1994.',
master_log_file='mysql-bin.000002',
master_log_pos=1398;
mysql> start slave;
mysql> show slave status\G
出现图片最下方的两个yes,这样就设置成功了
3.测试
思路:在server1上新建数据库和表格,然后在server2上查看是否同步
1)在server新建xupt数据库
mysql> create database xupt;
2)在server2上查看
ok~