mysql主从复制

it2023-03-01  87

本章目录

一.mysql主从复制1.1 原理1.2 复制的过程 二.实验案例2.1 案例环境2.2 实验过程2.2.1 建立时间同步环境2.2.2 编译安装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)