day52 LNMP集群---数据库的拆分

day52 LNMP集群--数据库的拆分

前言

超哥是为我们分享很多的实际的工作的经验,我必须要听进去,消化,在心中理解更好的成为你自己的工作的经验。

作为一个伏笔

集群的拆分

# 上一节我么是部署了单机LNMP,在往下我们要进行拆分,无论是性能还是安全性,都是务必要进行拆分

1.nginx集群
2.mysql
3.共享型数据库
......

## 拆分的思路
1.当前的单机环境已经装好了,数据也有了,需要拆分多个机器。
2.需要考虑数据的迁移

#情况2
初始的环境直接以集群的模式部署,o而k之。

为什么要集群的拆分

网站上线,用户增多,公司搞得钱了
网站开始变卡了---->开始和老板说要钱了。

2.LNMP框架不能单机,太危险了。
遇见大的故障,php代码出现bug,导致服务器上的内存用完了,服务器卡死了。
用户访问网站,出不来页面,然后报500
GG


数据库的拆分+php的远程的访问

必要的因素

应用拆分为集群后,需要考虑的问题
1.数据的备份和恢复
2.LNMP的每一个组件调用,从本地连接,改为远程的链接。
3.mysql的远程连接的授权。

拆分步骤

1.部署db-51机器,mariadb程序
2,web-7导出数据,发给db-51
3. db-51导入数据,设置远程连接的权限。
4.web-7 测试远程连接db-51
5.修改php的配置的文件,连接远程的mysql地址的db-51
6.访问网站,测试读写的情况。

当你的php和mysql的两台机器后测试wordpress正常吗?
1.能读取你昨天写的文章的数据?(确保数据的恢复没问题)
2. 还能写入数据吗?(确保数据库的连接和读写都没什么问题)

这就是完整的单机到集群的拆分的思路(数据库+php)

实战1. 拆分数据库

1.拆分的背景是,把单机的各个组件,容易抢夺资源
导致服务器的资源压力较大,拆分的第一步就是把数据库拆分出去

2.测试ab命令对网站整体压力
如何对nginx.php都造成压力的方式
#访问动态的资源,请求就会发给php

db命令
下载 httpd-tools 

linux网站的性能的压测

# 压测命令
ab -c 100 -n 10000  网站地址
-c  并发数量
-n  次数

对于我们来所也要时不时的关注生产实践操作
每天学习进本的操作知识
生产实际操作
看的就是我们平时的基本功扎不扎实,遇见问题是否能解决,能不能有思路。

什么是大佬,我也想成为
能够解决问题

通过这个top的实时的查看判断出
当这个后端压力很大的时候,1000个请求还没发完,还没解析完

关于更多的性能方面的分析,了解即可,以后慢慢学

判断出,后端解析的能力比较差,比较慢。

具体的拆分的步骤

在你知道为什么要拆开之后,在去拆解,学通,学透彻。

1. 基于已有数据web-7开始操作
导出当前数据库的数据(还得数据库锁表,防止数据的写入,备份时出现错误。)
这个等到专门学习MySQL的时候在去细聊

先导出所有的数据
# -A 备份所有的数据库,数据表
# --single-transaction 保证数据库的完整性

这里把当前机器上的所有的数据库,以及数据表发给目标的机器。
会携带当前数据库的mysql.user,也就是用户的信息

mysqldump -uroot -pyzk666 -A --single-transaction > /opt/alldb.sql

# 这里导出的sql文件,就是完全的sql语句,恢复该操作,也就其实是db-51的数据库
把这些sql重新执行一遍,
其实就是在重新的创建数据库
创建数据表
插入数据表

2. 把数据,发给db-51机器
前提是db-51机器上已经安装好了mariadb.

web7发数据给db-51机器
[root@web-7 opt]# scp ./alldb.sql root@10.0.0.51:/opt


3.该db-51机器,导入数据了。
导入该备份的数据,也同时导入用户的信息,
【准备一个新的机器,从0去安装mysql,默认是没有密码的。】

db-51上登录mysql,用web-7那会指定的用户名,密码也是一样的方便好记

mysql -uroot -pyzk666 < /opt/alldb.sql

导入后重启数据服务
systemctl restart mariadb 

重启以后,当前数据库的用户的信息,就会以你回复的数据为准了。
登录测试
mysql -uroot -pyzk666

#查看是否能select 查询到你昨天写的博客的数据
#这里是让你执行如下的sql语句,去查询mysql里面的数据,也就是你在wordpress中的数据
#这是一些基本的sql的语句
#以后我们将学习mysql的所有的内容。
#记住以下的5条就足够了
MariaDB [wordpress]> show databases;

MariaDB [wordpress]> use wordpress;

MariaDB [wordpress]> show tables;

MariaDB [wordpress]> 
MariaDB [wordpress]> desc wp_posts;

MariaDB [wordpress]> 
MariaDB [wordpress]> select post_content  from wp_posts;

4. 你还得设置sql语句,创建一个用于远程连接的账号
web-7去链接他
# grant all privileges 授予所有的权限
# on *.*对所有的数据库,里面的数据表操作。
# to 'yzk'@'%' identified by 'yzk666';

#上述的语句,表示创建一个用户名yzk ,允许在任何远程的主机上 % 
#去登陆当前这个db-51 且设置该用户的密码是yzk666

MariaDB [(none)]> grant all privileges on *.* to 'yzk'@'%' identified by 'yzk666';
Query OK, 0 rows affected (0.00 sec)


#立即刷新mysql的权限
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

# 5.测试在web-7机器可以远程登录吗?
[root@web-7 opt]# mysql -uyzk -pyzk666 -h172.16.1.51
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

web-7连接mysql数据库


测试web-7的php网站是否可以远程连接该数据库。

修改wordpress的php的源码
代码的源码在
/code/wordpress/wp-config.php

// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wrodpress' );

/** Database username */
define( 'DB_USER', 'yzk' );
#设置好db-51的连接用户yzk-----修改

/** Database password */
define( 'DB_PASSWORD', 'yzk666' );
#设置好db-51的连接用户密码yzk666---修改

/** Database hostname */
define( 'DB_HOST', '172.16.1.51' );

/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );

/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

测试再次访问web-7可以读取到远程的db-51数据吗?

1.停止web-7本地的数据库
systemctl stop mariadb

netstat -tunlp | grep 3306

2.测试访问

如何判断,这里的数据库,是读取db-51

1.再写一篇博客,看看db-51里面有数据吗?
http://wordpress.yzk.con/wp-login.php
访问后台
yzk01
yzk666

在后台操作,也等于修改数据库里面的内容
你学习完数据库mysql的语句,也可以直接修改mysql里面的内容,让网站的内容更新
(这个一般不建议干,这个是最暴力的方法)

2.查看当前web-7机器,tcp的链接的情况,是否连接了db-51机器。
[root@web-7 opt]# ss -an | grep 3306
tcp    TIME-WAIT  0      0      172.16.1.7:47394              172.16.1.51:3306  

netstat 命令就不行啦哦
这里通过ss命令,看到tcp/ip的方式
可以看到当前服务器,建立啦多少tcp连接



3,停止db-51的数据库
systemctl stop mariadb 

#数据库连接错误(找db-51问题)

image-20250423192423294

至此数据库拆分完毕

1.实现把web-7的数据备份,发给了db-51

db-51导入了数据

配置了远程访问的权限

修改web-7的产品代码,远程连接数据库

测试数据库读写正常

posted @ 2025-04-24 14:11  国家一级冲浪yzk  阅读(20)  评论(0)    收藏  举报