如何在 Ubuntu 22.04 下编译 StoneDB for MySQL 8.0 | StoneDB 使用教程 #1


作者:双飞(花名:小鱼)
杭州电子科技大学在读硕士
StoneDB 内核研发实习生
❝大家好,我是 StoneDB 的实习生小鱼,目前正在做 StoneDB 8.0 内核升级相关的一些事情。刚开始接触数据库开发没多久,在 Ubuntu 22.04 下编译 StoneDB 8.0 时踩了不少坑。比如重装了 make、cmake,到后来发现没必要,还有用 gcc-11(推荐用 gcc-9 一次编译通过) 通过源码来编译 RocksDB 等库的时候也踩了不少坑,不过在同事的协助下都解决了,并把这个过程中遇到的一些问题形成了一篇编译指南,记录在 Ubuntu22.04 下编译 StoneDB 8.0 的一些心得,希望其它同学能更轻松顺利的编译使用 StoneDB 8.0。
❞
本文说明了如何在Ubuntu 22.04 的环境下编译 StoneDB for MySQL 8.0
编译工具以及第三方库的版本要求如下:
-
GCC 9.4.0
-
Make 3.82 or later
-
CMake 3.7.2 or later
-
marisa 0.77
-
RocksDB 6.12.6
-
Boost 1.77
以下命令的执行可能会遇到权限问题,建议在管理员权限下运行,或者使用 sudo
第一步:安装依赖包
sudo apt install -y gcc
sudo apt install -y g++
sudo apt install -y make
sudo apt install -y cmake
sudo apt install -y build-essential
sudo apt install -y autoconf
sudo apt install -y tree
sudo apt install -y bison
sudo apt install -y git
sudo apt install -y libtool
sudo apt install -y numactl
sudo apt install -y python3-dev
sudo apt install -y openssl
sudo apt install -y perl
sudo apt install -y binutils
sudo apt install -y libgmp-dev
sudo apt install -y libmpfr-dev
sudo apt install -y libmpc-dev
sudo apt install -y libisl-dev
sudo apt install -y zlib1g-dev
sudo apt install -y liblz4-dev
sudo apt install -y libbz2-dev
sudo apt install -y libzstd-dev
sudo apt install -y zstd
sudo apt install -y lz4
sudo apt install -y ncurses-dev
sudo apt install -y libsnappy-dev
sudo apt install -y libedit-dev
sudo apt install -y libaio-dev
sudo apt install -y libncurses5-dev
sudo apt install -y libreadline-dev
sudo apt install -y libpam0g-dev
sudo apt install -y libicu-dev
sudo apt install -y libboost-dev
sudo apt install -y libgflags-dev
sudo apt install -y libjemalloc-dev
sudo apt install -y libssl-dev
sudo apt install -y pkg-config
libssl-dev可能安装不成功,你可以使用aptitude安装,安装过程中的选项要选择n y y
sudo apt install aptitude
sudo aptitude install libssl-dev...
# type n y y
第二步:安装第三方库
StoneDB 依赖 marisa、rocksdb、boost,在编译 marisa、rocksdb、boost 时,建议指定安装路径。示例中我们指定了 marisa、rocksdb、boost 的安装路径,你可以根据自己的需求更改安装路径。
1. 安装 cmake
注意检查你的 cmake 版本,如果你的cmake 版本 < 3.72, 安装 cmake
wget https://cmake.org/files/v3.7/cmake-3.7.2.tar.gz
tar -zxvf cmake-3.7.2.tar.gz
cd cmake-3.7.2
./bootstrap && make && make install
/usr/local/bin/cmake --version
apt remove cmake -y
ln -s /usr/local/bin/cmake /usr/bin/
cmake --version
如果你的gcc版本过高, 可能导致编译失败. 你可以在
cmake-3.72/Source/cmServerProtocal.cxx的文件开头加上#include <limits>来解决这个问题.
#include <algorithm>
#include <string>
#include <vector>
#include <limits>
2. 安装 make
注意检查你的Make版本,如果你的make版本 < 3.82, 安装 make
wget http://mirrors.ustc.edu.cn/gnu/make/make-3.82.tar.gz
tar -zxvf make-3.82.tar.gz
cd make-3.82
./configure --prefix=/usr/local/make
make && make install
rm -rf /usr/local/bin/make
ln -s /usr/local/make/bin/make /usr/local/bin/make
make --version
3. 安装marisa
git clone https://github.com/s-yata/marisa-trie.git
cd marisa-trie
autoreconf -i
./configure --enable-native-code --prefix=/usr/local/stonedb-marisa
sudo make && make install
在这个例子中marisa的安装路径是/usr/local/stonedb-marisa. 你可以根据实际情况修改路径. 在这一步中, /usr/local/stonedb-marisa/lib目录中的内容如下.
root@htap-dev-64-2:/usr/local/stonedb-marisa/lib$ ls -l
total 4136
-rw-r--r-- 1 root root 2947618 Mar 20 16:25 libmarisa.a
-rwxr-xr-x 1 root root 967 Mar 20 16:25 libmarisa.la
lrwxrwxrwx 1 root root 18 Mar 20 16:25 libmarisa.so -> libmarisa.so.0.0.0
lrwxrwxrwx 1 root root 18 Mar 20 16:25 libmarisa.so.0 -> libmarisa.so.0.0.0
-rwxr-xr-x 1 root root 1273936 Mar 20 16:25 libmarisa.so.0.0.0
drwxrwxr-x 2 root root 4096 Mar 20 16:25 pkgconfig
4. 安装RocksDB
wget https://github.com/facebook/rocksdb/archive/refs/tags/v6.12.6.tar.gz
tar -zxvf v6.12.6.tar.gz
cd rocksdb-6.12.6sudo cmake ./ \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=/usr/local/stonedb-gcc-rocksdb \-DCMAKE_INSTALL_LIBDIR=/usr/local/stonedb-gcc-rocksdb \-DWITH_JEMALLOC=ON \-DWITH_SNAPPY=ON \-DWITH_LZ4=ON \-DWITH_ZLIB=ON \-DWITH_ZSTD=ON \-DUSE_RTTI=ON \-DROCKSDB_BUILD_SHARED=ON \-DWITH_GFLAGS=OFF \-DWITH_TOOLS=OFF \-DWITH_BENCHMARK_TOOLS=OFF \-DWITH_CORE_TOOLS=OFF sudo make -j`nproc`
sudo make install -j`nproc`
你的gcc版本可能过高, 可以将你的 CMakeLists.txt 的 310-317 行改成下方这样.
if(FAIL_ON_WARNINGS)if(MSVC)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")else() # assume GCC# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")endif()
endif()
在本例中RocksDB的安装目录为/usr/local/stonedb-gcc-rocksdb. 你可以根据实际情况修改路径. 在这一步中, /usr/local/stonedb-gcc-rocksdb目录中文件如下
root@htap-dev-64-2:/usr/local/stonedb-gcc-rocksdb$ ls -l
total 29352
drwxr-xr-x 3 root root 4096 Mar 20 17:12 cmake
drwxr-xr-x 3 root root 4096 Mar 20 17:12 include
-rw-r--r-- 1 root root 20555728 Mar 20 17:11 librocksdb.a
lrwxrwxrwx 1 root root 15 Mar 20 17:12 librocksdb.so -> librocksdb.so.6
lrwxrwxrwx 1 root root 20 Mar 20 17:12 librocksdb.so.6 -> librocksdb.so.6.12.6
-rw-r--r-- 1 root root 9490272 Mar 20 17:12 librocksdb.so.6.12.6
5. 安装Boost
wget https://sourceforge.net/projects/boost/files/boost/1.77.0/boost_1_77_0.tar.gz
tar -zxvf boost_1_77_0.tar.gz
cd boost_1_77_0
./bootstrap.sh --prefix=/usr/local/stonedb-boost177
./b2 install --with=all
在本例中boost的安装目录为/usr/local/stonedb-boost. 你可以根据实际情况修改路径. 在这一步中, /usr/local/stonedb-boost/lib目录中的内容如下.
root@htap-dev-64-2:/usr/local/stonedb-boost177/lib$ ls -l
total 41612
drwxrwxr-x 49 root root 4096 Mar 20 18:57 cmake
-rw-rw-r-- 1 root root 14648 Mar 20 18:56 libboost_atomic.a
lrwxrwxrwx 1 root root 25 Mar 20 18:57 libboost_atomic.so -> libboost_atomic.so.1.77.0
-rwxrwxr-x 1 root root 22248 Mar 20 18:57 libboost_atomic.so.1.77.0
-rw-rw-r-- 1 root root 181638 Mar 20 18:56 libboost_chrono.a
lrwxrwxrwx 1 root root 25 Mar 20 18:57 libboost_chrono.so -> libboost_chrono.so.1.77.0
-rwxrwxr-x 1 root root 55000 Mar 20 18:57 libboost_chrono.so.1.77.0
-rw-rw-r-- 1 root root 166894 Mar 20 18:56 libboost_container.a
lrwxrwxrwx 1 root root 28 Mar 20 18:57 libboost_container.so -> libboost_container.so.1.77.0
-rwxrwxr-x 1 root root 111912 Mar 20 18:57 libboost_container.so.1.77.0
-rw-rw-r-- 1 root root 6874 Mar 20 18:56 libboost_context.a
lrwxrwxrwx 1 root root 26 Mar 20 18:57 libboost_context.so -> libboost_context.so.1.77.0
-rwxrwxr-x 1 root root 16584 Mar 20 18:57 libboost_context.so.1.77.0
-rw-rw-r-- 1 root root 275376 Mar 20 18:56 libboost_contract.a
lrwxrwxrwx 1 root root 27 Mar 20 18:57 libboost_contract.so -> libboost_contract.so.1.77.0
-rwxrwxr-x 1 root root 148672 Mar 20 18:57 libboost_contract.so.1.77.0
-rw-rw-r-- 1 root root 178370 Mar 20 18:56 libboost_coroutine.a
lrwxrwxrwx 1 root root 28 Mar 20 18:57 libboost_coroutine.so -> libboost_coroutine.so.1.77.0
-rwxrwxr-x 1 root root 84440 Mar 20 18:57 libboost_coroutine.so.1.77.0
-rw-rw-r-- 1 root root 1458 Mar 20 18:56 libboost_date_time.a
lrwxrwxrwx 1 root root 28 Mar 20 18:57 libboost_date_time.so -> libboost_date_time.so.1.77.0
-rwxrwxr-x 1 root root 15184 Mar 20 18:57 libboost_date_time.so.1.77.0
-rw-rw-r-- 1 root root 1654 Mar 20 18:57 libboost_exception.a
-rw-rw-r-- 1 root root 249818 Mar 20 18:56 libboost_fiber.a
lrwxrwxrwx 1 root root 24 Mar 20 18:56 libboost_fiber.so -> libboost_fiber.so.1.77.0
-rwxrwxr-x 1 root root 107648 Mar 20 18:56 libboost_fiber.so.1.77.0
-rw-rw-r-- 1 root root 520738 Mar 20 18:56 libboost_filesystem.a
lrwxrwxrwx 1 root root 29 Mar 20 18:56 libboost_filesystem.so -> libboost_filesystem.so.1.77.0
-rwxrwxr-x 1 root root 178288 Mar 20 18:56 libboost_filesystem.so.1.77.0
-rw-rw-r-- 1 root root 1015048 Mar 20 18:57 libboost_graph.a
lrwxrwxrwx 1 root root 24 Mar 20 18:56 libboost_graph.so -> libboost_graph.so.1.77.0
-rwxrwxr-x 1 root root 525440 Mar 20 18:56 libboost_graph.so.1.77.0
-rw-rw-r-- 1 root root 250402 Mar 20 18:56 libboost_iostreams.a
lrwxrwxrwx 1 root root 28 Mar 20 18:56 libboost_iostreams.so -> libboost_iostreams.so.1.77.0
-rwxrwxr-x 1 root root 129440 Mar 20 18:56 libboost_iostreams.so.1.77.0
-rw-rw-r-- 1 root root 478396 Mar 20 18:57 libboost_json.a
lrwxrwxrwx 1 root root 23 Mar 20 18:56 libboost_json.so -> libboost_json.so.1.77.0
-rwxrwxr-x 1 root root 329512 Mar 20 18:56 libboost_json.so.1.77.0
-rw-rw-r-- 1 root root 3158276 Mar 20 18:57 libboost_locale.a
lrwxrwxrwx 1 root root 25 Mar 20 18:56 libboost_locale.so -> libboost_locale.so.1.77.0
-rwxrwxr-x 1 root root 1177200 Mar 20 18:56 libboost_locale.so.1.77.0
6. 安装Gtest
sudo git clone https://github.com/google/googletest.git -b release-1.12.0
cd googletest
sudo mkdir build
cd build
sudo cmake .. -DBUILD_GMOCK=OFF
sudo make
sudo make install
默认安装路径为/usr/local/.
ls /usr/local/include/
...... gtest
ls /usr/local/lib/ # 32-bit os
ls /usr/local/lib64/ # 64-bit os
...... cmake libgtest.a libgtest_main.a
第三步:编译StoneDB
现在StoneDB有三个分支: StoneDB-5.6 (for MySQL 5.6)、 StoneDB-5.7 (for MySQL 5.7) and StoneDB-8.0 (for MySQL 8.0). 本文安装的是StoneDB-8.0. 在本例中源代码保存在/目录中.
cd /
git clone https://github.com/stoneatom/stonedb.git
在编译前, 像下文一样更改编译脚本:
你可以根据自己的需求将安装目录更改为你的实际安装目录, 本例中用的是
/stonedb/,记得将marisa, RocksDB, 和 Boost的路径改为你的这三个库的实际安装路径.
cd stonedb
git checkout -b 8.0 origin/stonedb-8.0-dev
mkdir build
cd build
mkdir install8 mysql8
cd mysql8
cmake ../../ \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_INSTALL_PREFIX=/stonedb/build/install8 \
-DMYSQL_DATADIR=/stonedb/build/install8/data \
-DSYSCONFDIR=/stonedb/build/install8 \
-DMYSQL_UNIX_ADDR=/stonedb/build/install8/tmp/mysql.sock \
-DWITH_BOOST=/usr/local/stonedb-boost177 \
-DWITH_MARISA=/usr/local/stonedb-marisa \
-DWITH_ROCKSDB=/usr/local/stonedb-gcc-rocksdb \
-DDOWNLOAD_BOOST=0
make -j`nproc`
make install -j`nproc`
第四步:启动StoneDB
你需要手动创建几个目录, 然后初始化并启动StoneDB. 你还需要填写你的配置文件my.cnf, 包括安装目录和端口.
cd ../install8
### 新建目录
sudo mkdir data binlog log tmp redolog undolog### 配置my.cnf
sudo cp ../../scripts/my.cnf.sample my.cnf
sudo sed -i "s|YOUR_ABS_PATH|$(pwd)|g" my.cnf### 初始化StoneDB
sudo ./bin/mysqld --defaults-file=./my.cnf --initialize-insecure### 启动StoneDB
sudo ./bin/mysqld --user=root &
第五步:登录 StoneDB
./bin/mysql -uroot
### 设置用户 root 的密码为 'stonedb123'
mysql> alter user 'root'@'localhost' identified by 'stonedb123';
Query OK, 0 rows affected
### 允许远程访问
mysql> use mysql;
mysql> update user set host='%' where user='root';
以上就是在 Ubuntu 22.04 下编译 StoneDB for MySQL 8.0 的方式,本文也同步在我们的官网上,如果有更多疑问可以查看 StoneDB 的官网,或者加入 StoneDB 用户群给我们反馈。
相关文章:
如何在 Ubuntu 22.04 下编译 StoneDB for MySQL 8.0 | StoneDB 使用教程 #1
作者:双飞(花名:小鱼) 杭州电子科技大学在读硕士 StoneDB 内核研发实习生 ❝ 大家好,我是 StoneDB 的实习生小鱼,目前正在做 StoneDB 8.0 内核升级相关的一些事情。刚开始接触数据库开发没多久,…...
AMEYA360:尼得科科宝旋转型DIP开关系列汇总
旋转型DIP开关 S-4000 电路:BCD(十进制) 代码格式:实码 安装类型:表面贴装 调整位置:顶部 可水洗:无 端子类型:J 引线, 鸥翼型 旋转型DIP开关 SA-7000 电路:BCD(十进制), BCH(十六进制) 代码格式…...
为什么感觉 C/C++ 不火了?
首先C和C是两个非常不一样的编程语言。 C语言在系统开发领域地位非常稳固,几乎没有替代产品。应用层开发近年来略微有被Rust取代的迹象。 C由于支持的编程范式过多,导致不同水平的人写出来的代码质量差异太大,这给软件的稳健性带来了很大的…...
【Linux】在服务器上创建Crontab(定时任务),自动执行shell脚本
业务场景:该文即为上次编写shell脚本的姊妹篇,在上文基础上,将可执行的脚本通过linux的定时任务自动执行,节省人力物力,话不多说,开始操作! 一、打开我们的服务器连接工具 连上服务器后,在任意位置都可以执行:crontab -e 如果没有进入编辑cron任务模式 根据提示查看…...
内存分析工具之Mat
自定义类MatClazz内存个数为9521。当前对象占用内存为16个字节。不包括其属性bytes的字节数。 通过查看MatClazz引用的类之byte数组之bytes。其单个数组占用的字节数为10256。整个内存MatClazz中属性bytes占用的byte[]字节数为97746376,与直方图统计趋近。 通过选…...
【逗老师的PMP学习笔记】项目的运行环境
一、影响项目运行的因素 主要分两种因素 事业环境因素(更多的是制约和限制因素)组织过程资产(可以借鉴的经验和知识) 1、细说事业环境因素(更多的是制约和限制因素) 资源可用性 例如包括合同和采购制约…...
Rust- 模块
(1)在项目根目录下创建mylib(里面实现自定义的外部模块) cargo new --lib mylib (2)在 项目名\mylib\src\lib.rs文件中实现新模块 pub mod add_salary {pub fn study(name: String) {println!("Rust…...
【开源源码学习】
C 迷你高尔夫 一款打高尔夫的游戏。亮点是碰撞反应和关卡设计。 GitHub - mgerdes/Open-Golf: A cross-platform minigolf game written in C. TypeScript 俄罗斯方块 复刻经典的俄罗斯方块,项目采用ReactReduxImmutable的技术栈。 GitHub - chvin/react-tetr…...
CNN-NER论文详解
论文:https://arxiv.org/abs/2208.04534 代码:https://github.com/yhcc/CNN_Nested_NER/tree/master 文章目录 有关工作前期介绍CNN-NER模型介绍 代码讲解主类多头biaffineCNNLoss解码数据传入格式 参考资料 有关工作 前期介绍 过去一共主要有四类方式…...
利用ChatGPT制作行业应用:哪些行业最受益
引言 随着人工智能技术的快速发展,ChatGPT(Chat Generative Pre-trained Transformer)成为了一种引人注目的工具,它能够生成自然流畅的对话内容。这种技术不仅在娱乐领域有着广泛的应用,还可以在各个行业中发挥重要作…...
【SA8295P 源码分析】60 - QNX Host 如何新增 android_test 分区给 Android GVM 挂载使用
【SA8295P 源码分析】60 - QNX Host 如何新增 android_test 分区给 Android GVM 挂载使用 一、QNX 侧:创建分区、配置下载、配置透传1.1 修改分区表,新增 android_test 分区,大小为 2GByte1.2 配置下载 android_test.img 镜像1.3 配置 /dev/disk/android_test_a 分区透传到 …...
Linux 用户和权限
一、root 用户 root 用户(超级管理员) 无论是windows、Macos、Linux均采用多用户的管理模式进行权限管理。在Linux系统中,拥有最大权限的账户名为:root (超级管理员)。 root用户拥有最大的系统操作权限,而普通用户在许多地方的权限是受限的。…...
分布式应用:ELFK集群部署
目录 一、理论 1.ELFK集群 2.filebeat 3.部署ELK集群 二、实验 1. ELFK集群部署 三、总结 一、理论 1.ELFK集群 (1)概念 ELFK集群部署(FilebeatELK),ELFK ES logstashfilebeatkibana 。 数据流 架构 2.fi…...
Quartz使用文档,使用Quartz实现动态任务,Spring集成Quartz,Quartz集群部署,Quartz源码分析
文章目录 一、Quartz 基本介绍二、Quartz Java 编程1、文档2、引入依赖3、入门案例4、默认配置文件 三、Quartz 重要组件1、Quartz架构体系2、JobDetail3、Trigger(1)代码实例(2)SimpleTrigger(3)CalendarI…...
Go -- 测试 and 项目实战
没有后端基础,学起来真是费劲,所以打算速刷一下,代码跟着敲一遍,有个印象,大项目肯定也做不了了,先把该学的学了,有空就跟点单体项目,还有该看的书.... 目录 🍌单元测试…...
GitHub基本使用
GitHub搜索 直接搜索 直接搜索关键字 明确搜索仓库标题 语法:in:name [关键词]展示:比如我们想在GitHub仓库中标题中搜索带有SpringBoot关键词的,我们可以样搜: in:name SpringBoot 明确搜索描述 语法:in:description [关键词]展…...
微信小程序生成带参数的二维码base64转png显示
getQRCode() {var that this;wx.request({url: http://localhost:8080/getQRCode?ID 13,header: {content-type: application/json},method: POST,responseType: arraybuffer,//将原本按文本解析修改为arraybuffersuccess(res) {that.setData({getQRCode: wx.arrayBufferToB…...
量子计算机:下一代计算技术的奇点
介绍 量子计算机是一种基于量子力学原理的全新计算技术,它利用量子比特的特性进行计算,具有破解当前经典计算机难以解决问题的潜力。在过去几十年里,量子计算机一直是计算机科学领域的一个热门话题。本篇博客将深入探讨量子计算机的基本原理…...
【ChatGPT】ChatGPT是如何训练得到的?
前言 ChatGPT是一种基于语言模型的聊天机器人,它使用了GPT(Generative Pre-trained Transformer)的深度学习架构来生成与用户的对话。GPT是一种使用Transformer编码器和解码器的预训练模型,它已被广泛用于生成自然语言文本的各种…...
Docker设置代理、Linux系统设置代理
使用方式 新建或修改~/.docker/config.json文件,设置可用的代理地址。 {"proxies": {"default": {"httpProxy": "http://192.168.0.32:1080","httpsProxy": "http://192.168.0.32:1080","noPro…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
