主从复制:将主数据库中的DDL和DML操作通过二进制日志(BINLOG)传输到从数据库上,然后将这些日志重新执行(重做);从而使得从数据库的数据与主数据库保持一致。当系统访问量大时,单数据库可能无法保证系统的性能,需要配置多台数据库来提高系统性能进行读写分离,把访问量分担,同时主从复制也起到了一个数据备份的功能。
kafka主从复制?
简单通俗说,主机把改变操作记录保存到一个日志文件中,从机获取到这个日志文件,在自己的机器上运行
主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;
从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进自己的relay log中;
从:sql执行线程——执行relay log中的语句;
MySQL复制表。复制过程
Binary log:主数据库的二进制日志
Relay log:从服务器的中继日志
Redis主从复制、第一步:master在每个事务更新数据完成之前,将该操作记录串行地写入到binlog文件中。
第二步:salve开启一个I/O Thread,该线程在master打开一个普通连接,主要工作是binlog dump process。如果读取的进度已经跟上了master,就进入睡眠状态并等待master产生新的事件。I/O线程最终的目的是将这些事件写入到中继日志中。
第三步:SQL Thread会读取中继日志,并顺序执行该日志中的SQL事件,从而与主数据库中的数据保持一致。
MySQL 主从?准备两台装有mysql数据库的机器,在此笔者使用了两台虚拟机系统是ubuntu18.04,在一台机器安装好mysql数据库之后克隆就行了(通过这种方法会有一个坑后面再说),保证这两台虚拟机可上网可以相互ping通。
修改数据库配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf, 注意:这个文件根据安装mysql方式不同路径不同,需要找到自己mysql的配置文件 在[mysqld]节点中配置如下:
配置说明:
redis主从复制漏洞,这里就完成了主机数据库配置文件的修改,保存之后重启mysql服务。
从机数据库配置相对简单点,也是修改数据库配置文件(如上路径),只需要在【mysqld】节点中配置server-id即可:
server-id不能和主机重复了,read-only这里理论上从机只做读操作,所以设置为1,但是这里有坑下文再说
从机的配置配置一个server-id就可以了保存退出,重启服务,这里我们就配置好了一台主机和从机 主机:192.168.192.133 从机:192.168.192.132
在图中我们可以看到log_bin 的value是ON说明是打开了二进制文件配置,log_bin_basenaem 的value 就是文件的保存地址,去到目录查看
这里的mysql-bin.000001就是生成的二进制文件了
1.mysql -u root -p 根据提示输入密码
2. 使用命令:grant REPLICATION SLAVE ON *.* to 'ayou'@'192.168.192.132' identified by '123456';
3. 命令解析grant: 是数据库的授权命令
ayou:被授权的账号
REPLICATION SLAVE:复制权限
‘192.168.192.132’:被授权登录的从机ip
‘123456’:被授权账号的密码
执行命令后,再执行刷新权限表命令:
FLUSH PRIVILEGES;
查看某个账号被分配权限的命令:如
show grants for ‘ayou’@‘192.168.192.132’
show master status
在上文中在主机中为从机账号授权了,现在要通过这个账号来连接主机,步骤如下:
1.登录数据库mysql -u root -p
2.登录成功后输入命令:change master to master_host='192.168.192.133',master_user='ayou',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=10756;
命令详解:
master_host:主机ip地址
master_user:master授权账号
master_password:master授权的密码
master_log_file:对应的二进制文件,如上图所示的FIle
master_log_pos=:对应的是master上的磁道(通俗将就是你要从二进制文件的哪个地方开始做复制)
3.输入成功后执行如下命令启动slave,:
start slave;
4.执行如下命令查看slave状态:
show slave status\G;
slave_Io_State:状态必须显示为 Waiting for master to send event
Slave_IO_Running:YES 状态必须显示为 YES
Slave_SQL_Running:YES 状态必须显示为 YES
以上三项条件必须满足才证明主从之间的通道打开。
如上所示我们在主机数据库创建了test数据库,在test数据库中创建了test数据表,在表中插入了一条记录,按理说主从连接通道已经建立好此时去从机查看就会和主机数据一致,我们查看从机数据库。
再试一次,在主机上插入数据
insert into test values(1,‘234789’);
返回从机查看,
发现数据同步是成功的,说明我们的主从复制是生效的.
这里补充一下,如果在生产过程中,你的从库是后面再搭建的而主库已经有一些数据库表和数据了, 从库数据的复制是从主从架构搭建之后的,所以搭建之前的主库的数据需要手动导入到从库后建立主从复制机制。
上文操作中我们已经把主从复制搭建好了,但是“主从复制”这四个字常常伴随着“读写分离”四个字,在开发中我们为了避免主从数据库数据冲突,需要给主数据库可读可写的权限,从数据库拥有读的权限就可。写数据的时候都往主数据库写,而读数据时则可以通过java或其他程序来规定读取哪个数据库。
本文详细分析了mysql数据库的主从复制,但是在实际的操作过程中可能会遇到不少问题。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态