目录
一、优点:
1.进行备份 保障数据的安全
2.可以缓解主库的压力 主库写入数据 从库读取数据 一个主最多可以有八个从
二、主从复制的原理:
主节点会将新插入的数据,写入到bin-log(二进制)日志中,然后生成一个i/o线程,将二进制日志传递到从节点上,从节点负责接收的是i/o线程,i/o将数据传递到relay-log(中继)日志中,从节点将会生成一个sql线程,从中继日志中读取数据,进行写入到从节点上sql线程作用是从中继日志中读取内容i/0线程的传递二进制日志的
三、主从复制的过程:
从节点将会主动向主节点获取数据,从节点将会生成一个i/o和sql线程,主节点将会生成一个dump线程,其中的i/o线程负责去bin-log日志中去读取内容,将二进制日志传递到从节点上,从节点负责接收的是i/o线程,i/o将数据传递到relay-log(中继)日志中,从节点将会生成一个sql线程,从中继日志中读取数据,进行写入到从节点上。
四、构建思路:
1.配置主服务器:启动binlog日志,授权用户,查看binlog日志信息
2.配置从服务器:设置server_id,确保与主服务器数据一致,制定主库信息,启动slave程序,查看状态信息
五、主节点配置过程:
1.关闭selinux,防火墙
[root@server1 ~]# setenforce 0 临时关闭
[root@server1 ~]# systemctl stop firewalld.service
2.修改MySQL配置文件
[root@server1 ~]# vim /etc/my.cnf
[mysqld]
server_id=40
log_bin=server1 #节点标识 开启二进制日志
[root@server1 ~]# systemctl restart mysqld 重启MySQL服务
3.进入MySQL添加用户(作用:从服务器拷贝命令时,连接主服务器的用户。但MySQL8之后,只能先创建用户,在赋权)
mysql> create user "slave"@"%" identified by "FTT@sxz123";
mysql> flush privileges;
mysql> grant replication slave on *.* to "slave"@"%" ;
mysql> show master status; 查看binlog日志信息
+----------------+----------+--------------+------------------+------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Execu
+----------------+----------+--------------+------------------+------
| server1.000001 | 858 | | |
+----------------+----------+--------------+------------------+------
解释:
grant 授权
replication slave 给从授权
on *.*所有的库下的所有的表
to "slave"@".%" slave 这个用户 % 表示可以在任何一台电脑上登录,也可以指定某台电脑可以远程登录
六、在第二台搭建从数据库
1.修改MySQL配置文件
[root@server2 ~]# vim /etc/my.cnf
[mysqld]
server_id=8
[root@server1 ~]# systemctl restart mysqld 重启MySQL服务
2.进入MySQL
mysql> change master to master_host="172.17.9.50",master_port=3306,master_user="slave",master_password="FTT@sxz123",master_log_file="servver1.000001",master_log_pos=858,get_master_public_key=1;
解释:
change master to #接收授权
master_host="172.17.9.50", #主上面的host
master_user="slave", #主上面的授权用户
master_password="FTT@sxz123", #密码
master_log_file="server1.000001", #主的二进制文件名
master_log_pos=858; #偏移值的量
原因是mysql8的密码方式采用的跟之前的不同,需要这么来使用就可以了在从库进行授权位置的时候添加参数:get_master_public_key=1,就可以了
mysql> start slave; 启动slave进程
mysql> show slave status\G 查看
3.扩展如果不是这两个yes解决方法,进入MySQL
mysql> stop slave;
mysql> change master to master_host="172.17.9.50",master_user="slave",master_password="FTT@sxz123",master_log_file="server1.000001",master_log_pos=858;
mysql> start slave;
mysql> show slave status\G
七、验证
1.在主服务器中添加信息
mysql> create database ftt;
mysql> use ftt;
mysql> create table ftt.user(name char(10));
mysql> insert into ftt.user values("111");
mysql> insert into ftt.user values("222");
mysql> insert into ftt.user values("333");
mysql> insert into ftt.user values("444");
mysql> select * from ftt.user;
+------+
| name |
+------+
| 111 |
| 222 |
| 333 |
| 444 |
+------+
2.在从服务器中验证
mysql> use ftt;
Database changed
mysql> select * from ftt.user;
+------+
| name |
+------+
| 111 |
| 222 |
| 333 |
| 444 |
+------+