mysql主从复制、GTID、半同步复制

mysql复制

1、MySQL的复制是基于binlog的。
2、MySQL复制包括两部分,IO线程 和 SQL线程。
3、 IO线程主要是用于拉取接收Master传递过来的binlog,并将其写入到relay log
4、SQL线程主要负责解析relay log,并应用到slave中
5.、不管怎么说,IO和SQL线程都是单线程的,然后master却是多线程的,所以难免会有延迟,为了解决这个问题,多线程应运而生了

主从复制

将主数据库中的DDL和DML操作通过二进制日志传输到从数据库上,然后将这些日志重新执行,从而使得从数据库中的数据与主数据库中的数据保持一致。

server4  安装mysql的虚拟机作为Master(主数据库)
server1  新的虚拟机作为slave端(从数据库)
#将主数据库中的mysql目录和/etc/my.cnf文件复制给从数据库
[root@server4 ~]# scp -r /usr/local/mysql/ server1:/usr/local/
[root@server4 ~]# scp /etc/my.cnf server1:/etc/

在这里插入图片描述

#在从数据库中
[root@server1 ~]# cd /usr/local/mysql/support-files
#拷贝启动脚本
[root@server1 support-files]# cp mysql.server /etc/init.d/mysqld
#添加环境变量
[root@server1 support-files]# cd
[root@server1 ~]# vim .bash_profile 
[root@server1 ~]# tail -n 3 .bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin

export PATH
[root@server1 ~]# source .bash_profile
[root@server1 ~]# which mysql
/usr/local/mysql/bin/mysql
[root@server1 ~]# useradd -M -d /data/mysql -s /sbin/nologin mysql
#创建数据目录并给予权限
[root@server1 ~]# mkdir /data/mysql -p
[root@server1 ~]# chown mysql.mysql /data/mysql

在这里插入图片描述

#初始化数据库,得到一个初始化密码
[root@server1 ~]# mysqld --initialize --user=mysql
#开启mysql
[root@server1 ~]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/data/mysql/mysqld.log'.
 SUCCESS! 
 #修改数据库密码
[root@server1 ~]# mysql_secure_installation 

在这里插入图片描述在这里插入图片描述
在主数据库master端开启binlog

#修改配置文件
[root@server4 ~]# vim /etc/my.cnf
[root@server4 ~]# head -5 /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
#添加如下内容
log-bin=mysql-bin##表示启用binlog,log-bin决定了msyql 的binlog的名字,⽣成的binlog名字为mysql-bin.000001
server_id=1	##正整数,可以不是递增,但必须为正
#重启数据库
[root@server4 ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS! 
[root@server4 ~]# cd /data/mysql/
[root@server4 mysql]# ls
---->mysql-bin.000001 mysql-bin.index
##mysql-bin.000001数据库的二进制操作日志,每重启一次会生成新的;mysql-bin.index,二进制日志的索引文件,记录了所有的日志

在这里插入图片描述

#进入数据库添加授权用户并进行授权,从数据库slave端可以通过该授权用户进入master端数据库
[root@server4 mysql]# mysql -p
Enter password: 
mysql> create user 'repl'@'%' identified by 'westos';
mysql> grant replication slave on *.* to 'repl'@'%';

在这里插入图片描述
在slave端进行测试

mysql -h 192.168.230.147 -u repl -p		##此时并没有什么权限
> show databases;
> exit								##退出

在这里插入图片描述
在master(server4)端可以查看主库状态可以看到二进制操作日至的名称和位置

> show master status;

在这里插入图片描述

#在slave端修改配置文件,设定server-id为2,重启服务。进入数据库,设定并查看是否设定完成
[root@server1 ~]# vim /etc/my.cnf
server_id=2
[root@server1 ~]# /etc/init.d/mysqld restart
Shutting down MySQL. SUCCESS! 
Starting MySQL. SUCCESS! 
[root@server1 ~]# mysql -p
Enter password: 
mysql> set global server_id=2;
mysql> show variables like 'server_id';

在这里插入图片描述
在这里插入图片描述
[注意] 主从复制之前,主从主机数据一定要同步,此时因为主从库数据不同步,所以需要将主库数据备份并传给从库。

##同步主从数据库

#在server4上创建数据库数据库表并写入数据
mysql> show variables like 'server_id';
mysql> create database westos;
mysql> show databases;
mysql>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值