Mysql:主从同步复制

一:应用场景

在企业网站中,后端Mysql数据库只有一台时,会有以下问题:
<1>:单点故障,mysql数据库一旦宕机 ,服务不可用
<2>:无法处理大量的并发数据请求
<3>:数据一旦丢失 会是一大事故
在这里插入图片描述
为了防止这类事故的发生,有了更安全有效的改造办法----设置主从同步。

主从的作用:

<1>:增加MySQL数据库服务器,对数据进行备份,形成主备。确保主备MySQL数据库服务器数据是一样的,主服务器宕机了,备份服务器继续工作,数据有保障。
<2>:通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力

在这里插入图片描述

二:MySQL主从备份原理

master 提供binlog二进制日志
slave    通过 I/O线程从master拿取binlog,并复制到slave的中继日志中
slave    通过 SQL线程从slave的中继日志中读取binlog ,然后解析到slave中

注意:主和从数据库版本必须是一样。或者主库的数据库版本必须比从库高,不然会导致很多故障的发生,最好版本一致。

Mysql主从复制部署环境:

主服务器:master 192.168.17.141
从服务器:slave1 192.168.17.135
从服务器:slave2 192.168.17.128

三:主从同步步骤

1:主服务器mysql-master 的配置:

<1>:master主服务器关闭Firewalld

[[email protected] ~]# hostnamectl set-hostname master   主机更名为master
[[email protected] ~]# su
[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# setenforce 0

<2>:建立时间同步环境,安装配置NTP时间同步服务器,并开启服务。
使用yum安装ntp服务
修改ntp.conf,设置主服务器为时间同步源

[[email protected] ~]# yum install ntp -y
[[email protected] ~]# vim /etc/ntp.conf
/server 查找 插入:
server 127.127.17.0     主服务器是时钟源
fudge 127.127.17.0 stratum 8   设置时间层级为8
[[email protected] ~]# systemctl start ntpd

<3>手工编译mysql(这里编译mysql5.7版本)

[[email protected] LNMP-C7]# tar zxvf mysql-boost-5.7.20.tar.gz -C /opt    //解压mysql到/opt
[[email protected] LNMP-C7]# cd /opt/mysql-5.7.20/
[[email protected] mysql-5.7.20]# yum install ncurses ncurses-devel bison cmake expat-devel -y   //下载mysql的环境包
[[email protected] mysql-5.7.20]# useradd -s /sbin/nologin mysql     //创建mysql的程序用户

cmake配置nginx的编译选项
[[email protected] 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 \
-DWYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost -DWITH_SYSTEMD=1
[[email protected] mysql-5.7.20]# make && make install    //编译和安装
[[email protected] mysql-5.7.20]# vim /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

[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
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
   
[[email protected] mysql-5.7.20]# chown -R mysql:mysql /usr/local/mysql     //数据库目录进行权限调整,更改属主和属组
[[email protected] mysql-5.7.20]# echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile      //更改环境变量
[[email protected] mysql-5.7.20]# echo 'export PATH' >> /etc/profile     //设置全局变量
[[email protected] mysql-5.7.20]# source /etc/profile      使/etc/profile的更改生效
[[email protected] mysql-5.7.20]# cd /usr/local/mysql  
[[email protected] mysql]#         //初始化数据库
 bin/mysqld \         
 --initialize-insecure \
 --user=mysql \
 --basedir=/usr/local/mysql \
 --datadir=/usr/local/mysql/data 
[[email protected] mysql]# cp usr/lib/systemd/system/mysqld.service  /usr/lib/systemd/system 
[[email protected] mysql]# systemctl start mysqld   //开启mysql服务
[[email protected] mysql]# netstat -ntap | grep mysqld   //查看mysql服务是否开启
[[email protected] mysql]# systemctl enable mysqld      //设置开机自启动
[[email protected] mysql]# mysqladmin -uroot -p password   //设置mysql的初始密码
[[email protected] ~]# echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
[[email protected] ~]# echo 'export PATH' >> /etc/profile
[[email protected] ~]# source /etc/profile

<4>:配置 Master主服务器,并开启服务。
修改/etc/my.cnf配置文件,增加服务器id,配置二进制日志选项

[[email protected] ~]# vim /etc/my.cnf
更改插入:
server-id = 11
log-bin=master-bin
log-slave-updates=true
[[email protected] ~]# systemctl restart mysqld

<5>:登录MySQL服务,授权所有的从服务器复制二进制日志的权限。并查看二进制日志位置

[[email protected] ~]# mysql -uroot -p  //登录数据库
mysql> grant replication slave on *.* to 'myslave'@'192.168.17.%' identified by '111';
mysql> show master status;

   master-bin.000001     451

2:从服务器mysql-slave1 的配置:

<1>:slave1服务器关闭Firewalld

[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# setenforce 0

<2>:在从服务器上进行时间同步,并开启服务
使用yum安装ntpdate并进行时间同步

[[email protected] ~]# yum install ntp ntpdate -y
[[email protected] ~]# systemctl start ntpd
[[email protected] ~]# /usr/sbin/ntpdate 192.168.17.141

<3>手工编译安装mysql5.7(和master主服务器 编译mysql数据库 步骤一样,可以看上面,这里省略)

<4>:配置slave1从服务器 ,并开启服务。
修改/etc/my.cnf配置文件,增加服务器id,配置二进制日志选项

[[email protected] ~]# vim /etc/my.cnf
插入更改:
server-id = 22
relay-log=relay-log-bin              从服务器同步日志文件记录到本地中继日志 
relay-log-index=slave-relay-bin.index    定义relay-log的位置和名称
[[email protected] ~]# systemctl restart mysqld   

<5>:登录MySQL,配置主从同步

[[email protected] ~]# mysql -uroot -p
mysql> change master to master_host='192.168.17.141',master_user='myslave',master_password='111',master_log_file='master-bin.000001',master_log_pos=451;
mysql> start salve;     启动主从同步
mysql> show slave status\G;   查看slave状态
   Slave_l0_Running: Yes
   Slave_SQL_Running: Yes

在这里插入图片描述

3:从服务器mysql-slave2 的配置:

<1>:slave2服务器关闭Firewalld

[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# setenforce 0

<2>:在从服务器上进行时间同步,并开启服务
使用yum安装ntpdate并进行时间同步

[[email protected] ~]# yum install ntp ntpdate -y
[[email protected] ~]# systemctl start ntpd
[[email protected] ~]# /usr/sbin/ntpdate 192.168.17.141

<3>手工编译安装mysql5.7(和master主服务器 编译mysql数据库 步骤一样,可以看上面,这里省略)

<4>:配置slave1从服务器
修改/etc/my.cnf配置文件,增加服务器id,配置二进制日志选项

[[email protected] ~]# vim /etc/my.cnf
插入更改:
server-id = 23
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
[[email protected] ~]# systemctl restart mysqld

<5>:登录MySQL,配置主从同步

[[email protected] ~]# mysql -uroot -p
mysql> change master to master_host='192.168.17.141',master_user='myslave',master_password='111',master_log_file='master-bin.000001',master_log_pos=451;
mysql> start salve;
mysql> show slave status\G;

在这里插入图片描述

4:同步配置完成,主从同步复制效果验证

主服务器master--创建数据库:
   mysql> create database abc;
   mysql> show databases;
从服务器slave1--查看数据库: mysql> show databases;
从服务器slave2--查看数据库: mysql> show databases;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在主服务器登录MySQL,新建数据库abc
在从服务器上登录MySQL,分别查看数据库,显示与主服务器数据库相同,则主从复制成功。

发布了40 篇原创文章 · 获赞 6 · 访问量 672

猜你喜欢

转载自blog.csdn.net/weixin_45691464/article/details/103964962