mysql主从复制

一.mysql主从复制

1.1 原理

在这里插入图片描述

1.2 复制的过程

◆在每个事物更新数据完成之前,Master在二进制日志记录这些改变。写入二进制日志完成后,Master通知存储
引擎提交事物
◆Slave将Master的Binary log 复制到中继日志,首先Slave开始一个工作线程–I/O线程,I/O线程在Master上开
一个普通的连接,然后开始Binlog dump process ,Binlog dump process从Master的二进制日志中读取事件,如果
已经更上Master,它会睡眠并等待Master产生的新事件。I/O线程将这些日志写入中继日志
◆SQL Slave thread (SQL从线程)处理该过程的最后一步,SQL线程从中继日志读取事件,并重放其的事件而更新
Slave数据,使其与Master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,
所以中继日志的开销很小。

二.实验案例

2.1 案例环境

主机 操作系统 IP地址 主要软件
amoeba centos-7.6-X86_64 20.0.0.19 amoeba-mysql-3.0.5-RC-distribution.zip
jdk-8u144-linux-x64.tar.gz

Master centos-7.6-X86_64 20.0.0.20 mysql-boost-5.7.20.tar.gz

Slave1 centos-7.6-X86_64 20.0.0.21 mysql-boost-5.7.20.tar.gz

Slave2 centos-7.6-X86_64 20.0.0.22 mysql-boost-5.7.20.tar.gz

###master、slave1、slave2####
关闭防火墙、关闭核心防护,并且配置本地yum源

软件选择:xshell

2.2 实验过程

2.2.1 建立时间同步环境

1、在主机Master 搭建时间同步服务器NTP
登录到20.0.0.20

yum -y install ntp
vi /etc/ntp.conf //最后面添加这二行
server 127.127.1.0
fudge 127.127.1.0 stratum 8

重新启动ntp服务器和设置开机自启

service ntpd restart
systemctl restart ntpd
systemctl enable ntpd

在这里插入图片描述

2、在从服务器(1) 上配置NTP同步
登录到20.0.0.21

yum -y install ntpdate
ntpdate 20.0.0.20

crontab -e #建立一次性计划任务

添加:*/2 * * * * /usr/sbin/ntpdate 20.0.0.20 >> /var/log/ntpdate.log

systemctl restart crond
systemctl enable crond
touch /var/log/ntpdate.log
tail -f /var/log/ntpdate.log //动态查看更新日志文件

安装部分省略!在这里插入图片描述

计划任务里添加在这里插入图片描述

查看日志文件
在这里插入图片描述

3、在从服务器 (2) 上配置NTP同步
登录到20.0.0.22

和从服务器(1)一样的配置,这里就省略了。。。

##Master、slave1、slave2 安装MySQL数据库##

!!如果想看mysql的配置文件的意思,可以看我之前的lamp架构,上面有解释

2.2.2 编译安装MySQL数据库

【安装 MySQL 服务】
1、安装Mysql环境依赖包
[root@localhost ~]#
yum -y install
gcc-c++
gcc
make
ncurses
ncurses-devel
bison
cmake

2、创建运行用户
useradd -s /sbin/nologin mysql

3、编译安装
###上传mysql-boost-5.7.20.tar.gz到opt目录下###
cd /opt
tar xzvf mysql-boost-5.7.20.tar.gz
cd /opt/mysql-5.7.20/
[root@localhost mysql-5.7.20]#
cmake
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock
-DSYSCONFDIR=/etc
-DSYSTEMD_PID_DIR=/usr/local/mysql
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1
-DMYSQL_DATADIR=/usr/local/mysql/data
-DWITH_BOOST=boost
-DWITH_SYSTEMD=1

[root@localhost mysql-5.7.20]# make && make install

4、数据库目录进行权限调整
[root@localhost mysql-5.7.20]#chown -R mysql:mysql /usr/local/mysql/

5、调整配置文件
[root@localhost mysql-5.7.20]#vi /etc/my.cnf
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
server-id = 1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

chown mysql:mysql /etc/my.cnf

6、设置环境变量
echo ‘PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH’ >> /etc/profile
echo ‘export PATH’ >> /etc/profile
source /etc/profile

7、初始化数据库
cd /usr/local/mysql/

bin/mysqld
–initialize-insecure
–user=mysql
–basedir=/usr/local/mysql
–datadir=/usr/local/mysql/data

cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/

8、数据库开启自启、 关闭、状态
systemctl enable mysqld
systemctl start mysqld
systemctl stop mysqld
systemctl status mysqld
netstat -anpt | grep 3306

9、设置Mysql密码
mysqladmin -u root -p password //设置的密码为abc123

10、登录数据库
mysql -u root -p

4.登录Master主服务器配置 20.0.0.20
vi /etc/my.cnf #在原来server-id = 1的地方修改成11

server-id = 11
log_bin = master-bin //主服务器日志文件
log-slave-updates = true //从服务器更新二进制日志

在这里插入图片描述

systemctl restart mysqld //重启一下数据库

5.登录Master数据库 给从服务器授权
[root@localhost mysql]# mysql -uroot -p

mysql>grant replication slave on . to ‘myslave’@‘20.0.0.%’ identified by ‘abc123’;

//开启同步,允许对方使用所有的数据库和所有的表通过myslave用户,地址在20.0.0.网段,使用密码abc123进行登录。

mysql>flush privileges; //刷新
mysql>show master status; //查看master数据库状态

输入密码,进入数据库
在这里插入图片描述

在这里插入图片描述

6.登录 从服务器 (1) 配置 20.0.0.21

[root@localhost mysql]# vi /etc/my.cnf
server-id = 22
relay-log = relay-log-bin //主服务器上同步日志文件记录到本地
relay-log-index = slave-relay-bin.index //定义relay-log的位置和名称

在这里插入图片描述
systemctl restart mysqld

7.在从服务器 (1) 配置同步

[root@localhost mysql]# mysql -uroot -p

mysql> change master to master_host=‘20.0.0.20’,master_user=‘myslave’,master_password=‘abc123’,master_log_file=‘master-bin.000001’,master_log_pos=1653;

mysql> start slave; //开启同步

mysql> show slave status\G //以竖向显示slave的状态,横向容易错乱

在这里插入图片描述

在这里插入图片描述

从服务器 (2) 20.0.0.22也是同样的操作,最后要看到这两个线程处于开启状态!!

三.验证

登录20.0.0.20
[root@localhost mysql]# mysql -uroot -p
mysql> create database school;
mysql> show databases;

在这里插入图片描述

登录20.0.0.21
[root@localhost mysql]# mysql -uroot -p
mysql> show databases;

在这里插入图片描述

登录20.0.0.22
[root@localhost mysql]# mysql -uroot -p
mysql> show databases;

在这里插入图片描述

验证成功!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值