网站LNMP架构学习
2026-04-15 14:32:25 0 举报仅支持查看
AI智能生成
Linu+nginx+mysql+php
运维
模版推荐
作者其他创作
大纲/内容
关系数据库管理系统(yum安装)
特点:
数据以表格的形式出现
每行记录数据的真实内容
每列记录数据真实内容的数据域
无数的行和列组成一个数据表
若干的表组成一个数据库
引擎:
MyISAM
5.5
索引缓存
数据可压缩
InnoDB
8.0
支持ACID事务
原子性
一致性
隔离性
持久性
集群索引
数据缓存
索引缓存
事务安全
yum 源安装
[openEuler-source]<br>name=openEuler-source<br>baseurl=http://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS/source/<br>enabled=1<br>gpgcheck=0<br>gpgkey=http://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS/source//RPM-GPG-KEY-openEuler<br>[openEuler-os]<br>name=openEuler-os<br>baseurl=http://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS/OS/x86_64/<br>enabled=1<br>gpgcheck=0<br>
yum clean all
yum makeche
yum install mysql-server mysql -y
rpm -qa | grep mysql
mysql-config-8.0.37-1.oe2203.x86_64<br>mysql-common-8.0.37-1.oe2203.x86_64<br>mysql-8.0.37-1.oe2203.x86_64<br>mysql-errmsg-8.0.37-1.oe2203.x86_64<br>mysql-selinux-1.0.0-2.oe2203.noarch<br>mysql-server-8.0.37-1.oe2203.x86_64
重要目录
ls -l /etc/my.cnf /etc/my.cnf.d/mysql-server.cnf <br>-rw-r--r--. 1 root root 251 May 7 2024 /etc/my.cnf<br>-rw-r--r--. 1 root root 612 May 7 2024 /etc/my.cnf.d/mysql-server.cnf<br>
日志
[root@localhost ~]# ls -ld /var/lib/mysql/<br>drwxr-xr-x. 2 mysql mysql 4096 May 7 2024 /var/lib/mysql/<br>
数据目录
[root@localhost ~]# ls -ld /var/log/mysql/<br>drwxr-x---. 2 mysql mysql 4096 Apr 11 16:17 /var/log/mysql/
日志
查看系统内核日志
tail -f 30n /var/log/message
cat /etc/my.cnf.d/mysql-server.cnf
[mysqld]<br>datadir=/var/lib/mysql<br>socket=/var/lib/mysql/mysql.sock<br>log-error=/var/log/mysql/mysqld.log<br>pid-file=/run/mysqld/mysqld.pid<br>
常用命令
show databases;
create database db1;
use db1;
show tables;
create table tb1 (id varchar(5),ip varchar(20),cpu varchar(10));
varchar
可变字符长度
char
固定长度,全部使用
desc tb1;
insert into tb1 values ("1","192.168.0.1","2C");
alter table tb1 modify column ip varchar(30);
修改ip字段的长度
update tb1 set cpu='8C' where id ="1";
flush privileges;
刷新权限
delete from tb1;
清空表内容
drop table tb1;
删除表
drop database db1;
show engines;
查看MySQL存储引擎
show variables like '%storage_engine%';
查看MySQL默认的存储引擎
配置navicat登录权限
use mysql;
设置root密码
alter user 'root'@'localhost' identified by 'Qrcode@2022';
update mysql.user set host='%' where user="root";
创建用户&授权jfedu用户访问
create user jfedu@'%' identified by 'Qrcode@2022';
grant all on *.* to jfedu@'%';
flush privileges;
刷新权限
登录mysql
mysql -uroot -p
套接字
mysql --scoket-file=/var/lib/mysql/mysql.scok
启动数据库
systemctl start mysqld.service
systemctl status mysqld.service
ps -ef | grep mysqld
mysql -h 192.168.153.18 -P 3306 -uroot -p
需要授权
mysql -h 127.0.0.1 -P 3306 -uroot -p
无需密码
关系数据库管理系统(源码编译安装)
安装步骤
官网下载MYSQL软件包<br>
Tar工具解压MYSQL软件<br>
MYSQL Cmake预编译<br>
MYSQL make编译<br>
MYSQL make install安装<br>
初始化MYSQL数据库<br>
修改MYSQL数据库密码<br>
数据库案例应用实战
好处
可以自定义安装目录
源码下载地址
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.37.tar.gz
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.41.tar.gz
推荐
安装依赖包和库文件
yum -y install cmake make gcc gcc-c++ ncurses-devel make perl autoconf automake zlib libxml2 libxml2-devel libgcrypt libtool bison openssl openssl-devel libtirpc-devel rpcgen
预编译
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \<br>-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \<br>-DMYSQL_DATADIR=/data/mysql/ \<br>-DSYSCONFDIR=/etc \<br>-DMYSQL_USER=mysql \<br>-DMYSQL_TCP_PORT=3306 \<br>-DWITH_XTRADB_STORAGE_ENGINE=1 \<br>-DWITH_INNOBASE_STORAGE_ENGINE=1 \<br>-DWITH_PARTITION_STORAGE_ENGINE=1 \<br>-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \<br>-DWITH_MYISAM_STORAGE_ENGINE=1 \<br>-DWITH_READLINE=1 \<br>-DENABLED_LOCAL_INFILE=1 \<br>-DDEFAULT_CHARSET=utf8 \<br>-DDEFAULT_COLLATION=utf8_general_ci \<br>-DEXTRA_CHARSETS=all \<br>-DWITH_BIG_TABLES=1 \<br>-DWITH_DEBUG=0 \<br>-DWITH_BOOST=./boost/ \<br>-DFORCE_INSOURCE_BUILD=1
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55 Cmake预编译;<br>-DMYSQL_UNIX_ADDR=/tmp/mysql.sock MYSQL Socket通信文件位置;<br>-DMYSQL_DATADIR=/data/mysql MYSQL数据存放路径;<br>-DSYSCONFDIR=/etc 配置文件路径; <br>-DMYSQL_USER=mysql MYSQL运行用户; <br>-DMYSQL_TCP_PORT=3306 MYSQL监听端口;<br>-DWITH_XTRADB_STORAGE_ENGINE=1 开启xtradb引擎支持;<br>-DWITH_INNOBASE_STORAGE_ENGINE=1 开启innodb引擎支持;<br>-DWITH_PARTITION_STORAGE_ENGINE=1 开启partition引擎支持;<br>-DWITH_BLACKHOLE_STORAGE_ENGINE=1 开启blackhole引擎支持;<br>-DWITH_MYISAM_STORAGE_ENGINE=1 开启MyISAM引擎支持;<br>-DWITH_READLINE=1 启用快捷键功能; <br>-DENABLED_LOCAL_INFILE=1 允许从本地导入数据;<br>-DWITH_EXTRA_CHARSETS=1 支持额外的字符集; 参数版本不支持<br>-DDEFAULT_CHARSET=utf8 默认字符集UTF-8; <br>-DDEFAULT_COLLATION=utf8_general_ci 检验字符; <br>-DEXTRA_CHARSETS=all 安装所有扩展字符集;<br>-DWITH_BIG_TABLES=1 将临时表存储在磁盘上;<br>-DWITH_DEBUG=0 禁止调试模式支持; <br>
make 编译; <br>make install 安装。
make -j4
4个线程编译
make install
安装
密码忘记之后,可以通过跳过权限表重置密码
vi /etc/my.cnf.d/mysql-server.cnf
[mysqld]<br>skip-grant-tables
跳过权限参数
重启mysql数据库
取消原始root用户密码信息
update user set authentication_string='' where user='root';
退出MySQL命令行终端,修改my.cnf或者mysql-server.cnf配置文件
skip-grant-tables
重启数据库
重新无密码进入mysql
mysql
再次修改mysql root密码
alter user 'root'@'localhost' identified by 'Qrcode@2022'
MySQL主从复制(bin-log二进制日志)
log-bin=qrcode
开启bin-log日志
[mysqld]<br>log-bin=qrcode<br>datadir=/var/lib/mysql<br>socket=/var/lib/mysql/mysql.sock<br>log-error=/var/log/mysql/mysqld.log<br>pid-file=/run/mysqld/mysqld.pid<br>
只能记录bin-log配置开启后启动的内容
qrcode是文件名
ls /var/lib/mysql/
datadir
改完配置之后需要重启数据库
mysqlbinlog /var/lib/mysql/qrcode.000001(点位)
bin-log日志通过position点位确定
# at 111
position=111
--start-position=
--stop-position=
误删除数据库恢复操作
mysqlbinlog /var/lib/mysql/qrcode.000001 --stop-position --start-position
mysqlbinlog --start-position=2552 --stop-position=2629 /var/lib/mysql/qrcode.000001 | mysql -uroot -pQrcode@2022<br>
需要找对对应的log-bin文件里面,在drop语句之前语句的position里面恢复数据
mysqlbinlog /var/lib/mysql/qrcode.000001 | grep -C5 "drop"
show databases;
主从复制
配置文件
server-id=1
log-bin=bbs
show master status\G
File: qrcode.000001<br> Position: 4005<br> Binlog_Do_DB: <br> Binlog_Ignore_DB: <br>Executed_Gtid_Set: <br>
CREATE USER 'tongbu'@'%' IDENTIFIED WITH mysql_native_password BY '123456';<br>
创建同步用户
GRANT REPLICATION SLAVE ON *.* TO 'tongbu'@'%';<br>
给用户复制权限
show master status;
slave上执行
change master to <br> master_host='192.168.153.18',<br> master_port=3306, <br> master_user='tongbu', <br> master_password='2022Root', <br> master_log_file='bbs.000002', <br> master_log_pos=656;
slave start;
show slave status\G
Slave_IO_Running和Slave_SQL_Running都为Yes,则说明配置成功。
mysql.slave_master_info表
允许ip访问
#创建用户&授权bbs用户访问;
create database bbs;
create user jfedu@'192.168.153.19' identified by '2022Root';
grant create,delete,insert,select on *.* to jfedu@'192.168.153.19';
增删改查权限
grant create,delete,insert,select on bbs.* to jfedu@'192.168.153.19';
flush privileges;
stop slave;<br>set global sql_slave_skip_counter =1;<br>start slave;<br>
跳过错误可能会导致数据不一致
需要确认能不能跳过
1表示1次错误
互为主从复制关系==>主主复制
两边都需要开启bin-log日志
server-id值不一样即可
操作的时候需要stop slave;
start slave;
主从数据同步差距很大的时候,需要将master数据库数据导入slave数据库
mysqldump -u root -p --all-databases > all.sql
导出所有的sql
scp all.sql root@192.168.153.19:~
slave操作
mysql -u root -p < all.sql
导入all.sql
stop slave;
change master to <br> master_host='192.168.153.18',<br> master_port=3306, <br> master_user='tongbu', <br> master_password='2022Root', <br> master_log_file='bbs.000002', <br> master_log_pos=656;
start slave;
从库的sql线程能检测relay-log日志的变化,从而达到同步的效果
配置文件详解
常用
[mysqld]<br>server-id=1<br>log-bin=bbs<br>datadir=/var/lib/mysql<br>socket=/var/lib/mysql/mysql.sock<br>log-error=/var/log/mysql/mysqld.log<br>pid-file=/run/mysqld/mysqld.pid
其他
user=mysql
默认
port=3306
默认
key_buffer = 4096M //key_buffer是用于索引块的缓冲区大小;
table_cache = 512 //为所有线程打开表的数量;
sort_buffer_size = 2M //每个需要进行排序的线程分配该大小的一个缓冲区;
default-storage-engine=INNODB //设置mysql默认引擎为Innodb;
[mysqld_safe] //mysql服务安全启动配置;
log-error=/var/log/mysqld.log //mysql错误日志路径;
pid-file=/var/run/mysqld/mysqld.pid //mysql PID进程文件;
key_buffer_size = 2048MB //MyISAM表索引缓冲区的大小;
max_connections = 3000 //mysql最大连接数;
innodb_buffer_pool_size = 512MB //InnoDB内存缓冲数据和索引大小;
basedir = /usr/local/mysql55/ //数据库安装路径;
[mysqldump] //数据库导出段配置;<br>
max_allowed_packet = 32M //服务器和客户端发送的最大数据包;
基础连接类
port 3306(或自定义) 数据库监听端口
server-id 1(唯一) 数据库唯一标识,主从复制必需,各节点值需唯一
datadir /var/lib/mysql 数据文件存储路径
socket /var/lib/mysql/mysql.sock 本地连接的 Unix 套接字文件路径
说明:生产环境建议修改 port 为非默认端口降低暴力破解风险;主从架构中主库 server-id 设为 100、从库设为 200/300 以避免重复
连接管理类
max_connections 150~3000 允许的最大并发连接数,根据服务器硬件资源和应用需求调整
max_connect_errors 10000 最大连接错误数,防止暴力破解
thread_cache_size 100 线程缓存数,减少线程频繁创建销毁的开销
wait_timeout 300(5分钟) 空闲连接超时时间(秒),释放闲置资源
back_log 300 连接等待队列大小,连接数达 max_connections 时新请求进入队列
说明:max_connections 默认值 151,生产环境需根据业务并发量上调,但需注意每个连接会占用 256KB~64MB 内存,需预留足够内存
InnoDB 存储引擎核心类
innodb_buffer_pool_size 物理内存的 60%~80% InnoDB 缓冲池大小,缓存数据页和索引页,减少磁盘随机 IO
innodb_log_file_size 1G~2G redo 日志文件大小
innodb_flush_log_at_trx_commit 1 或 2 日志刷盘策略:1=每次事务提交都刷盘(最安全),2=每秒刷盘(兼顾性能与安全)
innodb_file_per_table ON 独立表空间模式,便于单表维护和回收空间
innodb_io_capacity 2000~5000 I/O 吞吐量上限,SSD 建议 2000-5000,HDD 建议 200-500
innodb_thread_concurrency 0 线程并发数,0 表示自动适配 CPU 核心数
说明:innodb_buffer_pool_size 是最重要的性能参数之一,建议配置多个实例(innodb_buffer_pool_instances=8)减少锁竞争。如果只想获得最安全的数据保护,
innodb_flush_log_at_trx_commit 可设置为 1;如果允许数据有少量丢失风险(如最后 1 秒的 redo log)以换取更高性能,可设置为 2。
日志与查询类<br>
slow_query_log ON 开启慢查询日志
slow_query_log_file /var/log/mysql/slow.log 慢查询日志文件路径
long_query_time 0.1~2 慢查询阈值(秒),超过此时间的查询会被记录
log_error /var/log/mysql/error.log 错误日志文件路径
log_queries_not_using_indexes ON 记录未使用索引的查询
全局字符集类
character-set-server utf8mb4 服务器默认字符集,支持完整的 Unicode 字符
collation-server utf8mb4_unicode_ci 服务器默认排序规则
说明:MySQL 8.0 默认字符集已为 utf8mb4,无需额外配置,但建议显式声明以确保一致性。
其他
flush tables with read lock;
锁表
unlock tables;
解锁
show variables like '%char%'; 查看数据库字符集;
show engines; 查看MySQL存储引擎;
show variables like '%storage_engine%'; 查看MySQL默认的存储引擎;
alter table t1 engine=MyISAM;
http://dev.mysql.com/doc/refman/en/server-configuration-defaults.html
默认值
LNMP(Linux+Nginx+Mysql+Php)
机器IP准备:(防火墙已经disable)
192.168.153.17 nginx、php<br>192.168.153.18 mysql-master<br>192.168.153.19 mysql-slave<br>
版本
nginx-1:1.21.5-5.oe2203.x86_64
php-common-8.0.30-3.oe2203.x86_64
php-fpm-8.0.30-3.oe2203.x86_64
php-mysqlnd-8.0.30-3.oe2203.x86_64
php-pdo-8.0.30-3.oe2203.x86_64
php-xml-8.0.30-3.oe2203.x86_64
安装nginx、php
yum install nginx php-fpm -y
systemctl enable nginx
systemctl enable php-fpm
systemctl start nginx
systemctl start php-fpm
cd /usr/share/nginx/html/
vim index.php
<?php<br>phpinfo()<br>?>
自动整合PHP+Nginx配置文件
/etc/nginx/default.d/php.conf
主要界面改的是这个
vim /etc/nginx/nginx.conf.default
搜索9000端口,然后将注释去掉
/etc/nginx/conf.d/php-fpm.conf<br>
/etc/nginx/nginx.conf
nginx主配置文件
worker_processes 1;<br>events {<br> worker_connections 1024;<br>}<br>http {<br> include mime.types;<br> default_type application/octet-stream;<br> sendfile on;<br> keepalive_timeout 65;<br> server {<br> listen 80;<br> server_name localhost;<br> location / {<br> root html;<br> index index.html index.htm;<br> }<br> error_page 500 502 503 504 /50x.html;<br> location = /50x.html {<br> root html;<br> }<br> location ~ \.php$ {<br> root /usr/share/nginx/html;<br> fastcgi_pass 127.0.0.1:9000;<br> fastcgi_index index.php;<br> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br> include fastcgi_params;<br> }<br> }<br>}<br>
grep -aiEv "#|^$" nginx.conf.default > nginx.conf
注意修改目录
grep -aiEv "#|^$" /etc/nginx/nginx.conf.default
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
php配置文件修改:
vim /etc/php-fpm.d/www.conf
listen = /run/php-fpm/www.sock
默认使用sock的方法监听
listen = 127.0.0.1:9000
修改为端口监听
systemctl restart php-fpm
netstat -lnpt | grep 9000<br>tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3761/php-fpm: maste
http://192.168.153.17/index.php
修改完成后访问网站成功
LNMP发布目录
/usr/share/nginx/html
http://192.168.153.17/index.php
直接访问网站成功
Discuz或者WordPress(PHP语言)
部署安装包位置
https://gitee.com/Discuz/DiscuzX/attach_files
需登录手机号码
https://cn.wordpress.org/wordpress-6.3.8-zh_CN.tar.gz
上传包在/usr/share/nginx/html
unzip Discuz_X3.5_SC_UTF8_20250901.zip
不需要加引导页配置 index index.php
worker_processes 1;<br>events {<br> worker_connections 1024;<br>}<br>http {<br> include mime.types;<br> default_type application/octet-stream;<br> sendfile on;<br> keepalive_timeout 65;<br> server {<br> listen 80;<br> server_name localhost;<br> location / {<br> root html;<br> index index.php index.html index.htm;<br> }<br> error_page 500 502 503 504 /50x.html;<br> location = /50x.html {<br> root html;<br> }<br> location ~ \.php$ {<br> root /usr/share/nginx/html;<br> fastcgi_pass 127.0.0.1:9000;<br> fastcgi_index index.php;<br> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br> include fastcgi_params;<br> }<br> }<br>}<br>
mv upload/* ./
完成安装引导
同意
准备前安装
ps -ef | grep php-fpm
apache
chown -R apache data/ config/ uc_client/ uc_server/
cd /usr/share/nginx/html/config/
cp config_ucenter_default.php config_ucenter.php
cp config_global_default.php config_global.php
find . -type f -name "*.php" -exec chmod +x {} \;
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
刷新网页即可进入
http://192.168.153.17/
安装数据库连接以及支持xml格式文件插件
yum install php-mysqlnd php-xml -y
点击同意
下一步
全新安装 Discuz! X 与 UCenter Server
中间的
数据库服务器地址:
192.168.153.18
主库ip
进入192.168.153.18的数据库
mysql -uroot -p
create database ultrax;
数据库名:
ultrax
create user zhaohaiwang@'%' identified by '123580zhw';
grant all on ultrax.* to zhaohaiwang@'%';
flush privileges;
用户
zhaohaiwang
密码
123580zhw
数据表前缀
pre_
系统邮箱
admin@admin.com
管理员账号/密码
admin/Tcdn@2026
下一步
直接访问站点
注意关闭selinux
setenforce 0
vi /etc/selinux/config
sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
如果主库挂掉,需要写在从库上
修改网站自带的配置文件
vi /usr/share/nginx/html/config/config_global.php
$_config['db'][1]['dbhost'] = '192.168.153.18';
主
$_config['db'][1]['dbhost'] = '192.168.153.19';
从
grep -ra "192.168.153.18" *<br>
config/config_global.php.bak:$_config['db'][1]['dbhost'] = '192.168.153.18';
config/config_global.php:$_config['db'][1]['dbhost'] = '192.168.153.18';
config/config_ucenter.php:define('UC_DBHOST', '192.168.153.18');
uc_server/data/config.inc.php:define('UC_DBHOST', '192.168.153.18');
内容+位置
grep -ral "192.168.153.18" *<br>
config/config_global.php.bak
config/config_global.php
config/config_ucenter.php
uc_server/data/config.inc.php
位置
grep -rah "192.168.153.18" *<br>
$_config['db'][1]['dbhost'] = '192.168.153.18';
$_config['db'][1]['dbhost'] = '192.168.153.18';
define('UC_DBHOST', '192.168.153.18');
define('UC_DBHOST', '192.168.153.18');
内容
负载均衡php-fpm(192.168.153.30)
yum install nginx php-fpm -y
192.168.153.17 nginx、php<br>192.168.153.18 mysql-master<br>192.168.153.19 mysql-slave<br>192.168.153.30 php
setenforce 0
vi /etc/selinux/config
disable
vi /etc/php-fpm.d/www.conf
listen = 0.0.0.0:9000
允许所有机器访问
listen = 127.0.0.1:9000
允许本地机器访问(内部通讯)
本地lo回环地址
yum install telnet -y
Trying 192.168.153.30...<br>Connected to 192.168.153.30.<br>Escape character is '^]'.<br>Connection closed by foreign host.
telnet 192.168.153.30 9000
Trying 192.168.153.17...<br>Connected to 192.168.153.17.<br>Escape character is '^]'.<br>Connection closed by foreign host.
telnet 192.168.153.17 9000
vi /etc/nginx/nginx.conf
worker_processes 1;<br>events {<br> worker_connections 1024;<br>}<br>http {<br> include mime.types;<br> default_type application/octet-stream;<br> sendfile on;<br> keepalive_timeout 65;<br> upstream discuz {<br> server 192.168.153.17:9000;<br> server 192.168.153.30:9000;<br>}<br> server {<br> listen 80;<br> server_name localhost;<br> location / {<br> root html;<br> index index.php index.html index.htm;<br> }<br> error_page 500 502 503 504 /50x.html;<br> location = /50x.html {<br> root html;<br> }<br> location ~ \.php$ {<br> root /usr/share/nginx/html;<br> fastcgi_pass discuz;<br> fastcgi_index index.php;<br> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br> include fastcgi_params;<br> }<br> }<br>}
nginx -s reload
直接访问会报502
vi /etc/php-fpm.d/www.conf
listen.allowed_clients = 127.0.0.1,192.168.153.17
192.168.153.17
listen.allowed_clients = 127.0.0.1,192.168.153.17
192.168.153.30
添加配置访问nginx
systemctl restart php-fpm
scp -r /usr/share/nginx/html/* 192.168.153.30:/usr/share/nginx/html/
php目录发布目录下
yum install php-mysqlnd php-xml -y
systemctl restart php-fpm.service
http://192.168.153.17/
nginx ip访问
192.168.153.17
pkill php-fpm
停掉一台之后还能访问ip
http://192.168.153.17/
PHP ==> Mysql
/etc/hosts
两台添加
192.168.153.18 mysql.zhw.com
192.168.153.18 mysql.zhw.com
LNMP+redis
/dev/shm/
重启就会消失
内存
测试内存读写快还是硬盘读写快
dd if=/dev/zero of=/test.img bs=1M count=900
dd if=/dev/zero of=/dev/shm/test.img bs=1M count=900
内存更快,大概5倍以上
redis特点(Nosql数据库)
基于内存亦可持久化的日志型、key-value数据库
string
list
set
zset
hash
memcached
不能持久化
yum install redis -y
redis-4.0.14-6.oe2203.x86_64
vi /etc/redis.conf
redis-cli
进入数据库
127.0.0.1:6379>
set key value
keys *
get key
bind 0.0.0.0
修改配置文件/etc/redis.conf
systemctl start redis.service
systemctl enable redis.service
配置discuz论坛连接redis
修改php配置文件
$_config['memory']['redis']['server'] = '192.168.153.30';
vi /usr/share/nginx/html/config/config_global.php
修改后操作:(安装php-redis插件)
php-fpm -i | grep extension_dir<br>extension_dir => /usr/lib64/php/modules => /usr/lib64/php/modules
查看php插件保存位置
sudo yum install php-devel php-pear gcc -y
sudo pecl install redis
configure.ac:161: the top level
enable igbinary serializer support? [no] : no
enable lzf compression support? [no] : no
enable zstd compression support? [no] : no
enable msgpack serializer support? [no] : no
enable lz4 compression? [no] : no
use system liblz4? [yes] : yes
echo "extension=redis.so" | sudo tee /etc/php.d/20-redis.ini
udo systemctl restart php-fpm
udo systemctl restart php-fpm nginx
进入redis-cli运行key *即可看到pre开头的key
bgsave
后台备份
先停止后删除
删除
先停止后解压
导入数据
/var/lib/redis/dump.rdb
redis主从
yum install redis -y
bind 0.0.0.0
vi /etc/redis.conf
机器ip
192.168.153.30
master
192.168.153.19
slave
从库没有写权限 只有read权限
slaveof 192.168.153.30 6379
vi /etc/redis.conf
主库ip 主库端口
可以设置一主多从(推荐)
互为主主(不推荐)
vi /etc/redis.conf
slaveof 192.168.153.19 6379
slave-read-only=no
可读可写
slaveof 192.168.153.30 6379
slave-read-only=no
可读可写
可以设置级联从库(不推荐)
A主-B从
B从(主)-C从
减轻主库压力
systemctl restart redis
改配置需要重启redis
主库操作:
redis-cli
常用·
CONFIG SET requirepass "jfedu"
配置文件创建密码
AUTH jfedu
创建密码
redis-cli -h host -p port -a password 远程连接redis数据库;
redis-cli -h 192.168.153.30 -p 6379 -a zhaohaiwang
SLOWLOG 管理 redis 的慢日志;
SET keys values 设置key为jfedu,值为123;
DEL jfedu 删除key及值;
INFO CPU 查看服务器CPU占用信息;
KEYS jfedu 查看是存在jfedu的key;
KEYS * 查看Redis所有的KEY;
SAVE 异步保存数据到硬盘;
备份的文件/var/lib/redis
BGSAVE 后台异步保存当前数据库的数据到磁盘。
备份的文件/var/lib/redis
CONFIG GET * 获取Redis服务器所有配置信息;
CONFIG SET loglevel "notice" 设置Redis服务器日志级别;
CLIENT GETNAME 获取连接的名称;
CLIENT SETNAME 设置当前连接的名称;
CLUSTER SLOTS 获取集群节点的映射数组;
COMMAND 获取Redis命令详情数组;
COMMAND COUNT 获取 Redis 命令总数;
COMMAND GETKEYS 获取给定命令的所有键;
TIME 返回当前服务器时间;
CONFIG GET parameter 获取指定配置参数的值;
CONFIG SET parameter value 修改redis 配置参数,无需重启;
CONFIG RESETSTAT 重置 INFO 命令中的某些统计数据;
DBSIZE 返回当前数据库的 key 的数量;
DEBUG OBJECT key 获取 key 的调试信息;
DEBUG SEGFAULT 让Redis服务崩溃;
FLUSHALL 删除所有数据库的所有key;
FLUSHDB 删除当前数据库的所有key;
ROLE 返回主从实例所属的角色;
SHUTDOWN 异步保存数据到硬盘,并关闭服务器;
CONFIG REWRITE 启动 Redis时所指定的redis.conf 配置文件进行改写;
INFO [section] 获取Redis服务器的各种信息和统计数值;
SYNC 用于复制功能(replication)的内部命令;
SLAVEOF host port 指定服务器的从属服务器(slave server);
MONITOR 实时打印出Redis服务器接收到的命令,调试用;
LASTSAVE 返回最近一次Redis成功将数据保存到磁盘上的时间;
CLIENT PAUSE timeout 指定时间内终止运行来自客户端的命令;
BGREWRITEAOF 异步执行一个 AOF(AppendOnly File) 文件重写操作;
配置文件学习
# daemonize no Linux Shell终端运行redis,改为yes即后台运行Redis服务;
daemonize yes
no的话会一直在前台运行
/usr/bin/redis-server /etc/redis.conf
# 当运行多个 redis 服务时,需要指定不同的pid文件和端口
pidfile /var/run/redis.pid
# 指定redis运行的端口,默认是 6379
port 6379
#在高并发的环境中,为避免慢客户端的连接问题,需要设置一个高速后台日志
tcp-backlog 8192
# 指定redis只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求
# bind 192.168.1.100 10.0.0.1
# bind 0.0.0.0
#设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接;
timeout 10
# 在Linux 上,指定值(秒)用于发送 ACKs 的时间。注意关闭连接需要双倍的时间。默认为 0 。
tcp-keepalive 10
# Redis总共支持四个日志级别: debug 、 verbose 、 notice 、 warning ,默认为 verbose
# debug 记录很多信息,用于开发和测试
# varbose 有用的信息,不像 debug 会记录那么多
# notice 普通的 verbose ,常用于生产环境
# warning 只有非常重要或者严重的信息会记录到日志
loglevel notice
#配置 log 文件地址
#默认值为 stdout ,标准输出,若后台模式会输出到 /dev/null 。
logfile /var/log/redis/redis.log
#可用数据库数
#默认值为16 ,默认数据库为0,数据库范围在 0- ( database-1 )之间
databases 2
# 后台存储错误停止写。
stop-writes-on-bgsave-error yes
# 存储至本地数据库时(持久化到 rdb 文件)是否压缩数据,默认为 yes
rdbcompression yes
#save 60 10000 <br># save 900 1<br># save 300 10<br># save 60 10000
例如:60 秒内至少有 10000 个 key 被改变
#save <seconds> <changes>
如果 master 不能再正常工作,那么会在多个 slave 中,选择优先值最小的一个 slave 提升为 master ,优先值为 0 表示不能提升为 master 。<br>slave-priority 100
# 如果少于 N 个 slave 连接,且延迟时间 <=M 秒,则 master 可配置停止接受写操作。<br># 例如需要至少 3 个 slave 连接,且延迟 <=10 秒的配置:<br># min-slaves-to-write 3<br># min-slaves-max-lag 10<br># 设置 0 为禁用<br># 默认 min-slaves-to-write 为 0 (禁用), min-slaves-max-lag 为 10<br>
# 默认情况下, redis 会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁,如果发生诸如拉闸限电、拔插头等状况,那么将造成比较大范围的数据丢失。<br># 所以 redis 提供了另外一种更加高效的数据库备份及灾难恢复方式。<br># 开启 append only 模式之后, redis 会把所接收到的每一次写操作请求都追加到 appendonly.aof 文件中,当 redis 重新启动时,会从该文件恢复出之前的状态。<br># 但是这样会造成 appendonly.aof 文件过大,所以 redis 还支持了 BGREWRITEAOF 指令,对 appendonly.aof 进行重新整理。<br># 你可以同时开启 asynchronous dumps 和 AOF<br>appendonly no
# AOF 文件名称 ( 默认 : "appendonly.aof")<br># appendfilename appendonly.aof<br># Redis 支持三种同步 AOF 文件的策略 :<br># no: 不进行同步,系统去操作 . Faster.<br># always: always 表示每次有写操作都进行同步 . Slow, Safest.<br># everysec: 表示对写操作进行累积,每秒同步一次 . Compromise.(推荐参数)<br># 默认是 "everysec" ,按照速度和安全折中这是最好的。<br># 如果想让 Redis 能更高效的运行,你也可以设置为 "no" ,让操作系统决定什么时候去执行<br># 或者相反想让数据更安全你也可以设置为 "always"<br># 如果不确定就用 "everysec".<br># appendfsync always<br>appendfsync everysec<br># appendfsync no<br># AOF 策略设置为 always 或者 everysec 时,后台处理进程 ( 后台保存或者 AOF 日志重写 ) 会执行大量的 I/O 操作
appendfsync everysec 等于 save 1 1
# 在某些 Linux 配置中会阻止过长的 fsync() 请求。注意现在没有任何修复,即使 fsync 在另外一个线程进行处理<br># 为了减缓这个问题,可以设置下面这个参数 no-appendfsync-on-rewrite<br>no-appendfsync-on-rewrite no
# AOF 自动重写<br># 当 AOF 文件增长到一定大小的时候 Redis 能够调用 BGREWRITEAOF 对日志文件进行重写<br># 它是这样工作的: Redis 会记住上次进行些日志后文件的大小 ( 如果从开机以来还没进行过重写,那日子大小在开机的时候确定 )<br># 基础大小会同现在的大小进行比较。如果现在的大小比基础大小大制定的百分比,重写功能将启动<br># 同时需要指定一个最小大小用于 AOF 重写,这个用于阻止即使文件很小但是增长幅度很大也去重写 AOF 文件的情况<br># 设置 percentage 为 0 就关闭这个特性<br>auto-aof-rewrite-percentage 100<br>auto-aof-rewrite-min-size 64mb
redis不需要设置连接数
每秒10w写入
Collect
Get Started
Collect
Get Started
Collect
Get Started
Collect
Get Started
评论
0 条评论
下一页