Mysql----主从复制

Mysql-主从复制

数据备份

1:数据备份是一种古老而有效的数据保护手段,早期的数据备份手段主要是数据冷备,即定期将数据复制到
2:某种存储介质(磁带,光盘...)上并物理存档保管,如果系统存储损坏,那么就从冷备的存储中恢复数据
3:冷备的优点是简单和廉价,成本和技术难度都较低,缺点是不能保证数据最终一致
  由于数据是定期复制,因此备份设备中的数据比系统中的数据陈旧,
  如果系统数据丢失,那么从上个备份点开始后更新的数据就会永久丢失,
  不能从备份中恢复,同时也不能保证数据的可用性,
  从冷备存储中恢数据需要较长的时间,而这段时间无法访问数据,系统也不可用

什么是主从复制

 1:MySQL内建的复制功能是构建大型、高性能应用程序的基础。
    将MySQL的数据分布到多个系统上去,这种分布式的机制,
    是通过将MySQL的某一台主机的数据,复制到其他的主机slaves上,并重新执行一边来实现。
 2:复制过程中,一个服务器充当主服务器,而一个或多个其他服务器充当从服务器
    主服务器将更新写入二进制日志文件,并维护文件的一个索引,以跟踪日志循环。
 3:这些日志可以记录发送到从服务器的更新。当一个从服务器连接到主服务器时,
    它通知主服务器,从服务器在日志中读取的最后一次成功更新的位置。
    从服务器接收从那时发生的任何更新,然后封锁并等待主服务器通知更新。

实验环境:

master:server1:172.25.78.1
slave:server2:172.25.78.2

【1】mysql的主从复制
master进行数据库的操作,然后slave负责同步master的数据库
1)~7)【server1】【server2】都做

1)下载mysql的rpm包 2)并安装所需要的包

tar xf mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar
yum install mysql-community-client-5.7.24-1.el7.x86_64.rpm mysql-community-common-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
#安装后会替换mariadb相关的库文件
#server2也需要装

在这里插入图片描述

3)修改配置文件,配合官方文档看

   负责在主、从服务器传输各种修改动作的媒介是主服务器的二进制变更日志,
这个日志记载着需要传输给从服务器的各种修改动作。
   因此,主服务器必须激活二进制日志功能。
从服务器必须具备足以让它连接主服务器并请求主服务器把二进制变更日志传输给它的权限

[root@server1 ~]# vim /etc/my.cnf
##在文件最后加,启用二进制日志复制,id号来区分主机
log-bin=mysql-bin
server-id=1
在这里插入图片描述
[root@server2 ~]# vim /etc/my.cnf
server-id=2
在这里插入图片描述
4)启动mysql
[root@server1 ~]# systemctl start mysqld
在这里插入图片描述

5)会生成一个临时密码

cat /var/log/mysqld.log | grep password

6)尝试连接,但是发现不能查看库**

mysql -uroot -p 
password: uopw&_:ut6T&   ##输入密码
mysql> show databases;   ##会报错

在这里插入图片描述

7)安全初始化

mysql_secure_installation
密码要求有大小写,数字,特殊字符,其他全选y,回车即可
完成后可以登录数据库

在这里插入图片描述
【server1】
8)mysql -uroot -pWestos+001 ##登陆数据库

创建并授权用来做复制的用户
在Master的数据库中建立一个备份帐户:每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE权限。用户名的密码都会存储在文本文件master.info中
##一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。
mysql> grant replication slave on *.* to repl@'172.25.78.%' identified by 'Westos+001'; 
mysql> show plugins;	##查看插件,因为有密码插件,所以密码必须设置为复杂的
mysql> show master status;	##查看master状态

在这里插入图片描述
在这里插入图片描述
【server2】
在【server2】上尝试连接master的数据库,测试repl帐号
mysql -h 172.25.78.1 -urepl -pWestos+001 ## 可以登录,但是查看不到任何信息,因为没有权限

#在server2上配置master信息
登陆数据库:
[root@server2 ~]# mysql -uroot -pWestos+001
mysql> show databases;
mysql> change master to master_host='172.25.78.1', master_user='repl', master_password='Westos+001', master_log_file='mysql-bin.000003', master_log_pos=447;
mysql> start slave;
mysql> show slave status\G	##查看主从复制状态
Slave_IO_Running: Yes
Slave_SQL_Running: Yes		##这两个参数是Yes,表示成功
 详解:
master_host 的ip是master的ip
master_user 是刚刚master创建的用户名
master_password 是刚刚创建用户时的密码
master_log_file 是查看master状态表内显示的文件名,必须表内显示的
master_log_pos 是填写的文件名在表内对应的position,是日志的开始位置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【server1】
9)创建新数据测试主从同步是否生效

’注意:写操作只能在master节点上做,因为master节点不会去同步slave节点的内容’

mysql> create database westos; ##在server2上发现也能看到westos库 mysql> use westos;
mysql> create table usertb (
-> username varchar(10) not null,
-> password varchar(10) not null); ##建表

mysql> desc usertb; ##查看表信息

mysql> insert into usertb values (‘user1’,‘123’); ##插入数据

mysql> select * from usertb; ##查看
在这里插入图片描述
【server2】进行查看,是否同步了【server1】的数据

[root@server2 ~]# mysql -uroot -pWestos+001
mysql> show databases;
mysql> use westos;
mysql> select * from usertb;
##证明数据同步成功
在这里插入图片描述

总结: 进行复制时所有对复制中的表的更新必须在主服务器上进行。在操作的过程中,遇到无法同步的问题,例如:Slave_SQL_Running的 值 为NO,同步就会失败,用过两种解决办法,一种是stop slave,另一种是重新做主从,使其完全同步,此时注意的是要先进入主库,进行锁表,防止数据写入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值