这次来了解一下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能同步 主:
从:
测试:从创建库主不同步 从:
主:没有
实验完毕!!!