首页 网络编程正文

利用MySQL主从配置实现读写分离,减轻数据库服务器压力

kumb 网络编程 2019-04-15 09:22:12 749 0

大型Web应用程序,伴随着大量的并发访问,到了数据业务层、数据访问层,如果还是传统的数据结构,单靠一台服务器是扛不住的,如此多的数据库连接操作,必然导致系统反应缓慢,甚至系统崩溃、数据丢失等严重后果。

如何减少数据库的连接,一方面采用优秀的代码库、进行查询方面的优化,采用数据缓存技术memcached等,资金宽裕可以考虑假设集群,来分担主服务器的压力,比如今天要介绍的MySQL主从服务器,实现读写分离,从而减轻数据库的并发压力。

这里说明一下测试环境:服务器有两台,一台是我的windows 10家庭版(ip:192.168.20.1),另一台是VMware虚拟机CentOS7系统(ip:192.168.20.131),两台都安装最新的MySQL5.7.25版本数据库,下边是详细安装和配置过程:

一、在CentOS上安装MySQL数据库

1、配置YUM源在MySQL官网中下载YUM源rpm安装包:https://dev.mysql.com/downloads/repo/yum/

# 下载mysql源安装包
wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
# 安装mysql源
yum localinstall mysql57-community-release-el7-8.noarch.rpm

检查mysql源是否安装成功

yum repolist enabled | grep "mysql.*-community.*"

01.png

yum install mysql-community-server

3、启动MySQL服务

systemctl start mysqld

4、开机启动

systemctl enable mysqld
systemctl daemon-reload

5、修改root本地登录密码

mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改:

grep 'temporary password' /var/log/mysqld.log

MySQL5.7以后默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。

set password for 'root'@'localhost'=password('Yuwan1986*&');

刷新权限使之生效:

flush privileges;

重新启动mysql服务使配置生效:

systemctl restart mysqld

6、默认配置文件路径

配置文件:/etc/my.cnf

日志文件:/var/log/mysqld.log

服务脚本:/usr/lib/systemd/system/mysqld.service

socket文件:/var/run/mysqld/mysqld.pid

二、在Windows 10安装MySQL数据库

1、下载MYSQL官网下载MYSQL5.7.25,链接地址https://www.mysql.com/downloads/。进入官网点击Community,下载社区版,无需注册即可下载MYSQL的zip压缩包。

mysql_install.png

2、安装MYSQL

解压压缩包到c盘根目录下,使用命令行(管理员模式)进入C:\mysql-5.7.25-winx64\bin目录下,运行命令mysqld -install进行安装,完成后打开mysql的安装目录,如果里面没有data文件,则需要使用命令行在bin目录中执行mysqld --initialize-insecure,生成一个以root为用户名,空密码的用户,使用此账户登录MySQL后修改用户密码:

set password for 'root'@'localhost'=password('Yuwan1986*&');

3、配置MYSQL

在MYSQL的解压目录mysql-5.7.25-winx64下新建一个.ini格式文件my.ini,然后以记事本格式打开写入下面代码:

[mysqld]
basedir=C:\mysql-5.7.25-winx64
datadir=C:\mysql-5.7.25-winx64\data
port=3306

上面basedir、datadir后面盘符是你选择解压MYSQL的路径盘,我这里是解压在C盘。写入上面代码后保存关闭。接着我们来启动MYSQL服务,输入如下命令启动MySQL服务:

net start mysql

登录MySQL验证一下是否正常。

4、系统环境变量配置

设置下系统的环境变量,选择系统变量中的path进行编辑,新建一个路径,这个路径就是你的MYSQL解压路径,这里是C:\mysql-5.7.25-winx64\bin\,这样每次打开cmd窗口后直接就可以调用MYSQL的登录命令了。

path.png

这样Windows 10下的MySQL也安装好了,你可以使用命令行登录系统,做一些简单的测试了!

三、配置主从服务器

在配置主从服务器之前,先要把系统防火墙打开,在CentOS下放行3306端口使用如下命令:

# 放行3306端口
firewall-cmd --add-port=3306/tcp --permanent
# 重新加载设置
firewall-cmd --reload

Windows 10下在防火墙规则下新建TCP协议3306入站规则,操作方法如下图所示:

firewall.png

1、 centos主服务器(master)

设置master mysql配置文件/etc/my.cnf

[mysqld]
log-bin=mysql-bin
server-id = 1
expire_logs_days = 7

修改配置文件完成后重启mysql

systemctl restart mysqld

登录mysql查看server-id的值是否为1

SHOW VARIABLES LIKE 'server_id';

查看binglog功能是否开启

SHOW VARIABLES LIKE 'log_bin';

建立数据库mydb(我这里作为演示用,见附录3)

CREATE DATABASE `mydb` CHARACTER SET utf8 COLLATE utf8_general_ci;

查看bin-log的信息

SHOW MASTER STATUS;

stat.png

#注意:这里记住File的值:mysql-bin.000001和Position的值:316,后面会用到。

根据主从复制原理,从库想要和主库同步,必须要有一个连接的帐号,这个帐号是要在主库上创建的。所以要创建授权可以来读取日志文件的用户:

GRANT REPLICATION SLAVE ON *.* TO 'zhu'@'192.168.20.1' IDENTIFIED BY 'Yuwan1986*&';

刷新权限,使其生效

FLUSH PRIVILEGES;

查看zhu帐号是否生效

SELECT USER,HOST FROM mysql.user;

为了确保主服务器的账户配置正确,我们在从slave服务器上,登录下master服务器的MySQL账户验证一下。2、 Windows 10从服务器(slave)修改my.ini配置文件添加:

[mysqld]
server-id = 2
log-bin=mysql-bin #可以注释掉log-bin,从库一般不开启log-bin功能
relay-log = mysql-relay-bin #中继日志,可注释掉
expire_logs_days = 7 #自动清理7天前的日志,前面如果注释了,此处也不用添加了,注释掉吧
read_only = on #只读
replicate-wild-do-table=whsir.% #指定复制的库和表,此处%表示通配所有,见附录9

my.ini配置中一定要配置的就是server-id其他都可以省略掉!!!

配置好my.ini后重启mysql(不知道windows中如何重启mysql的请自行google)

net stop mysql
net start mysql

创建mydb库(我这里做演示用,直接就创建了,没有导入数据)

CREATE DATABASE mydb;

登录mysql查看server-id的值是否为2

SHOW VARIABLES LIKE 'server_id';

先停止slave同步,也可以使用STOP SLAVE停止

SLAVE STOP;

把用户的信息写入到了从库的data/master.info中

change master to master_host='192.168.20.131',master_user='zhu',master_password='Yuwan1986*&',master_log_file='mysql-bin.000001',master_log_pos=316;

上述配置好后启动slave同步

SLAVE START;

查看状态(\G就是结束),再加一个";" 就多余了,如果加上;会报错

SHOW SLAVE STATUS\G

slave.png

如果看到Slave_IO_Running和Slave_SQL_Running都是Yes,Seconds_Behind_Master:0,表示主从服务器已经配置成功

3、 操作数据库验证主从同步

在主服务器登录MySQL后执行如下语句:

CREATE TABLE `user` (
  `id` int(12) NOT NULL,
  `user_name` varchar(256) NOT NULL,
  `age` int(11) NOT NULL,
  `addtime` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

如果看到从服务器也创建了数据表,结构一致,那么主从服务器搭建就完全成功了!

我们致力于为三农(农业、农村、农民)提供专业物联网解决方案,同时也提供应用软件、微信小程序、手机App、企业网站的开发和跨境电商建站、网络营销等服务,站长微信号(mywit_net),添加后备注“黎辉物联网”,如有相关需求也可通过电子邮件(12tc@sina.cn)与我们取得联系

本站内容均来自互联网,如有涉及到侵权行为,请你及时与站长联系删除!

本文链接:https://www.kumb.cn/43.html

发表评论

评论列表(0人评论 , 749人围观)
☹还没有评论,来说两句吧...