Mysql主从复制的搭建及原理

2022-11-21 17:43:45 浏览数 (1)

这次来了解一下MySQL的主从复制,为什么要用主从复制?是什么原理? MySQL的主从复制带来很大的好处首先那就是数据复制的一致性,在生产环境中保证了数据的备份,而且主宕机后,从节点可以也可以保证正常工作, 模式有很多一主一从,一主两从,一主多从等等…

原理都是一样的:主节点将带有ddl和dml的语句记录到自己的二进制日志bin-log中,然后从节点通过I/O线程将二进制日志获取到自己的中继日志relay-log中,从节点通过sql线程将自己的中继日志relay-log中的命令进行执行,从而实现主从复制结构 本次实验环境两台服务器[一主一从]

服务器IP

Centos版本

服务

192.168.2.10

CentOS Linux release 7.6.1810 (Core)

MYSQL5.7(主)

192.168.2.20

CentOS Linux release 7.6.1810 (Core)

MYSQL5.7(从)

关防火墙/沙盒

代码语言:javascript复制
systemctl stop firewalld && setenforce 0

先进行安装MYSQL 1.安装MySQL的yum源

代码语言:javascript复制
wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
代码语言:javascript复制
yum -y install mysql57-community-release-el7-11.noarch.rpm

2.安装完成,查看是否安装成功

代码语言:javascript复制
yum repolist enabled | grep mysql.*

3.可以进行安装mysql了

代码语言:javascript复制
yum install mysql-community-server

4.安装完成后就可以启动mysql了

代码语言:javascript复制
systemctl start mysqld.service

5.获取随机密码

代码语言:javascript复制
grep 'temporary password' /var/log/mysqld.log

6.如果想要设置自己的密码简单的话 ,它自带密码检查机制不让你设置简单的进行sql输入设置

代码语言:javascript复制
mysql -uroot -p
password:刚获取的随机密码
修改默认密码复杂难度
mysql>set global validate_password_policy=0;#设置密码检查策略为0
mysql>set global validate_password_length=1;#设置密码的长度为1

7.进行修改数据库密码

代码语言:javascript复制
set password for 用户名 @localhost = password('新密码');

8.至此MySQL安装完毕

9.进行主从复制的设置修改配置文件
配置Master主库机器

开启binlog 设置mysql的唯一编号(mysql5.7即更高版本新加参数), 和开启binlog日志 输入vi /etc/my.cnf 进入配置文件,按Insert键进入编辑模式,添加如下参数 server-id=1 (机器的唯一标识) log-bin=/var/lib/mysql/mysql-bin (开启binlog)

进行mysql重启

代码语言:javascript复制
systemctl restart mysqld

进入mysql查看binlog是否开启成功

进入MySQL创建用户并授权

代码语言:javascript复制
grant replication slave on *.* to 'slave'@'192.168.2.%' identified by '123.com';

//一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。

注释:如果这条命令报错如下

代码语言:javascript复制
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
证明密码设置过于简单,需要重新设置策略
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
再去创建用户授权就行了执行刚才的命令
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
#刷新
配置Slave从库机器
代码语言:javascript复制
vi /etc/my.cnf

重启MySQL服务

代码语言:javascript复制
systemctl restart mysqld

查看主服务器状态

从库服务器MySQL登录,同步配置

代码语言:javascript复制
mysql> CHANGE MASTER TO MASTER_HOST='192.168.2.10',MASTER_USER='slave',MASTER_PASSWORD='123.com',MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=898;

启动同步

代码语言:javascript复制
start slave;

查看slave状态,这两项必须为yes

代码语言:javascript复制
show slave statusG;

测试一下同步是否成功

在Master上创建一个库Slave能同步 主:

从:

测试:从创建库主不同步 从:

主:没有

实验完毕!!!

0 人点赞