openEuler 下 Mysql 和 sysbench 测试环境搭建

openEuler 下 Mysql 和 sysbench 测试环境搭建

环境信息

[root@localhost local]# cat /etc/os-release
NAME="openEuler"
VERSION="22.03 (LTS-SP1)"
ID="openEuler"
VERSION_ID="22.03"
PRETTY_NAME="openEuler 22.03 (LTS-SP1)"
ANSI_COLOR="0;31"

概述

/etc/my.cnf 是配置文件,安装后运行前需要配置好。

生成测试数据较费时,可以将生成的数据备份起来,以后直接拷贝到 /data/文件夹下

安装流程

Mysql 安装

配置环境

groupadd mysql
useradd -g mysql mysql
passwd mysqlrm -rf /data/mysql
mkdir -p /data/mysql
cd /data/mysql
mkdir data tmp run log relaylogchown -R mysql:mysql /data[root@localhost mysql]# ll /
总用量 68
dr-xr-xr-x.   2 root   root    4096 1227 19:45 afs
lrwxrwxrwx.   1 root   root       7 1227 19:45 bin -> usr/bin
dr-xr-xr-x.   7 root   root    4096  524 20:06 boot
drwxr-xr-x.   3 mysql  mysql   4096  620 21:58 data

安装mysql

[root@localhost ~]# yum install mysql
[root@localhost ~]# which mysql
/usr/bin/mysql
或
[root@localhost sysbench-0.5-script]# which mysql
/usr/local/mysql/bin/mysql[root@localhost /]# rpm -qa | grep mysql
mysql-common-8.0.29-2.oe2203sp1.x86_64
mysql-8.0.29-2.oe2203sp1.x86_64

安装mysql-server
yum install mysql-server 后,才会找到mysqld

[root@localhost local]# yum install mysql-server
[root@localhost local]# find / -name mysqld
/run/mysqld
/usr/libexec/mysqld
/usr/sbin/mysqld
/etc/logrotate.d/mysqld

运行

如果是安装在/usr/local/mysql下

rm -f /etc/my.cnf
touch /etc/my.cnf
vim /etc/my.cnf
[mysqld_safe]
log-error=/data/mysql/log/mysql.log
pid-file=/data/mysql/run/mysqld.pid
[mysqldump]
quick
[mysql]
no-auto-rehash
[client]
default-character-set=utf8
[mysqld]
basedir=/usr/local/mysql
socket=/data/mysql/run/mysql.sock
tmpdir=/data/mysql/tmp
datadir=/data/mysql/data
default_authentication_plugin=mysql_native_password
port=3306
user=mysql
#skip-grant-tables

安装在/usr 下

[mysqld_safe]
log-error=/data/mysql/log/mysql.log
pid-file=/data/mysql/run/mysqld.pid
[mysqldump]
quick
[mysql]
no-auto-rehash
[client]
default-character-set=utf8
[mysqld]
#basedir=/usr
socket=/data/mysql/run/mysql.sock
tmpdir=/data/mysql/tmp
datadir=/data/mysql/data
default_authentication_plugin=mysql_native_password
port=3306
user=mysql
#skip-grant-tables

修改配置文件“/etc/my.cnf”的用户组和用户权限为mysql:mysql

chown mysql:mysql /etc/my.cnf
ll /etc/my.cnf

注意: 以下3步适用于20.03,而22.03我没有找到mysql.server文件,索性不用这种方式启动。此外2203在yum install之后,就可以找到which mysql,不用配置环境变量
MySQL加入service服务

chmod 777 /usr/local/mysql/support-files/mysql.server
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on

修改“/etc/init.d/mysql”的用户组和用户权限为mysql:mysql

chown -R mysql:mysql /etc/init.d/mysql
ll /etc/init.d/mysql

配置环境变量,并使配置生效

echo export PATH=$PATH:/usr/local/mysql/bin >> /etc/profile
source /etc/profile
env
which mysql

切换到mysql用户

su - mysql
whoami

初始化数据库

mysqld --defaults-file=/etc/my.cnf --initialize

/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize

初始化完成后,查看数据目录下数据文件“/data/mysql/data”的用户组和用户权限为mysql:mysql(因为前面/etc/my.cnf文件中配置的操作系统用户是user=mysql)。初始化会根据my.cnf配置一些环境,并生成一个初始密码,登录的时候会用到。假如终端上没有显示,可能是输出到了/data/mysql/log/ 下面的文件中

[mysql@localhost mysql]$ mysqld --defaults-file=/etc/my.cnf --initialize
2023-06-21T03:31:50.933036Z 0 [Warning] [MY-010918] [Server] 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead.
2023-06-21T03:31:50.933046Z 0 [System] [MY-013169] [Server] /usr/libexec/mysqld (mysqld 8.0.29) initializing of server in progress as process 8264
2023-06-21T03:31:50.940853Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2023-06-21T03:31:51.248956Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2023-06-21T03:31:52.592374Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: bM3hna>?ioE:

启动数据库

[mysql@localhost mysql]$ which mysqld
/usr/sbin/mysqld

以下三种方式都可以,2203推荐第三个,因为service前面没有注册

/usr/sbin/mysqld --defaults-file=/etc/my.cnf &
service mysql start
mysqld --defaults-file=/etc/my.cnf &

以下三种方式登录

mysql -uroot -p -S /data/mysql/run/mysql.sock
/usr/local/mysql/bin/mysql -uroot -p -S /data/mysql/run/mysql.sock

配置数据库帐号密码
(1)登录数据库以后,修改通过root用户登录数据库的密码

alter user 'root'@'localhost' identified by "123456";

(2)创建全域root用户(允许root从其他服务器访问

create user 'root'@'%' identified by '123456';

(3)进行授权

grant all privileges on *.* to 'root'@'%';
flush privileges;

退出数据库

exit

关闭数据库:三种方式

service mysql stop
mysqladmin -uroot -p123456 shutdown -S /data/mysql/run/mysql.sock
/usr/local/mysql/bin/mysqladmin -uroot -p123456 shutdown -S /data/mysql/run/mysql.sock
ps -ef | grep mysql

sysbench 安装及测试

yum -y install automake libtool* mariadb-devel
cd /home
wget https://github.com/akopytov/sysbench/archive/0.5.zip --no-check-certificate
mv 0.5.zip sysbench-0.5.zip
unzip sysbench-0.5.zip
vi /home/sysbench-0.5/sysbench/drivers/mysql/drv_mysql.c

在mysql_drv_real_connect函数末尾找到“return mysql_real_connect(…) == NULL;”。
替换

#if 0return mysql_real_connect(con,db_mysql_con->host,db_mysql_con->user,db_mysql_con->password,db_mysql_con->db,db_mysql_con->port,db_mysql_con->socket,
#if MYSQL_VERSION_ID >= 50000CLIENT_MULTI_STATEMENTS
#else0
#endif) == NULL;
#elseunsigned int timeout = 5;if (mysql_options(con, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&timeout)) {DEBUG("0x%p mysql_options MYSQL_OPT_CONNECT_TIMEOUT failed", con);}int ret = 0;int i = 0;for (; i < 5; i++) {ret = (mysql_real_connect(con,db_mysql_con->host,db_mysql_con->user,db_mysql_con->password,db_mysql_con->db,db_mysql_con->port,db_mysql_con->socket,
#if MYSQL_VERSION_ID >= 50000CLIENT_MULTI_STATEMENTS
#else0
#endif) == NULL);if (ret == 0) {DEBUG("0x%p mysql_options succeed", con);break;}DEBUG("0x%p mysql_options MYSQL_OPT_CONNECT_TIMEOUT timeout", con);usleep(1000);}return ret;
#endif

编译安装

 ./autogen.sh./configuremake -j128make -j128 install

上述步骤最好在/home下操作,因为后续调用的测试脚本(比如test_oltp_mix.sh)里面的路径是写死的。
登录数据库后创建sysbench数据库:

create database sysbench;
show databases;
use sysbench;
show tables;

登录Sysbench工具客户端,向MySQL数据库服务器导入数据。
执行如下命令向服务器导入测试数据,数据量为100张表*1万行数据(100*10000)

/home/sysbench-0.5/sysbench/sysbench --db-driver=mysql --test=/home/sysbench-0.5/sysbench/tests/db/parallel_prepare.lua --oltp-test-mode=complex --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-db=sysbench --mysql-user=root --mysql-password=123456 --max-time=7200 --max-requests=0 --mysql-table-engine=innodb --oltp-table-size=10000 --oltp-tables-count=100 --rand-type=special --rand-spec-pct=100 --num-threads=16 prepare

注意根据机器能力和使用场景,生成数据,自己的小虚拟机数据生成小一点。这个脚本末尾时prepare
一些数据库相关的lua测试代码:

[root@localhost sysbench-0.5]# cd sysbench/tests/db/
[root@localhost db]# ls
bulk_insert.lua  delete.lua  Makefile     Makefile.in  oltp_simple.lua       select.lua                select_random_ranges.lua  update_non_index.lua
common.lua       insert.lua  Makefile.am  oltp.lua     parallel_prepare.lua  select_random_points.lua  update_index.lua

下面的命令会生成sbtest1~100

[root@localhost db]# /home/sysbench-0.5/sysbench/sysbench --db-driver=mysql --test=/home/sysbench-0.5/sysbench/tests/db/parallel_prepare.lua --oltp-test-mode=complex --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-db=sysbench --mysql-user=root --mysql-password=123456 --max-time=7200 --max-requests=0 --mysql-table-engine=innodb --oltp-table-size=10000 --oltp-tables-count=100 --rand-type=special --rand-spec-pct=100 --num-threads=16 prepare
sysbench 0.5:  multi-threaded system evaluation benchmarkCreating table 'sbtest1'...
Inserting 10000 records into 'sbtest1'
Creating secondary indexes on 'sbtest1'...
Creating table 'sbtest2'...
Inserting 10000 records into 'sbtest2'
Creating secondary indexes on 'sbtest2'...
Creating table 'sbtest3'...

生成的数据在my.cnf配置的路径下(sysbench时前面我们创建的数据库):


[root@localhost sysbench]# pwd
/data/mysql/data/sysbench
[root@localhost sysbench]# ls
sbtest100.ibd  sbtest16.ibd  sbtest22.ibd  sbtest29.ibd  sbtest35.ibd  sbtest41.ibd  sbtest48.ibd  sbtest54.ibd  sbtest60.ibd  sbtest67.ibd  sbtest73.ibd  sbtest7.ibd   sbtest86.ibd  sbtest92.ibd  sbtest99.ibd
sbtest10.ibd   sbtest17.ibd  sbtest23.ibd  sbtest2.ibd   sbtest36.ibd  sbtest42.ibd  sbtest49.ibd  sbtest55.ibd  sbtest61.ibd  sbtest68.ibd  sbtest74.ibd  sbtest80.ibd  sbtest87.ibd  sbtest93.ibd  sbtest9.ibd
sbtest11.ibd   sbtest18.ibd  sbtest24.ibd  sbtest30.ibd  sbtest37.ibd  sbtest43.ibd  sbtest4.ibd   sbtest56.ibd  sbtest62.ibd  sbtest69.ibd  sbtest75.ibd  sbtest81.ibd  sbtest88.ibd  sbtest94.ibd
sbtest12.ibd   sbtest19.ibd  sbtest25.ibd  sbtest31.ibd  sbtest38.ibd  sbtest44.ibd  sbtest50.ibd  sbtest57.ibd  sbtest63.ibd  sbtest6.ibd   sbtest76.ibd  sbtest82.ibd  sbtest89.ibd  sbtest95.ibd
sbtest13.ibd   sbtest1.ibd   sbtest26.ibd  sbtest32.ibd  sbtest39.ibd  sbtest45.ibd  sbtest51.ibd  sbtest58.ibd  sbtest64.ibd  sbtest70.ibd  sbtest77.ibd  sbtest83.ibd  sbtest8.ibd   sbtest96.ibd
sbtest14.ibd   sbtest20.ibd  sbtest27.ibd  sbtest33.ibd  sbtest3.ibd   sbtest46.ibd  sbtest52.ibd  sbtest59.ibd  sbtest65.ibd  sbtest71.ibd  sbtest78.ibd  sbtest84.ibd  sbtest90.ibd  sbtest97.ibd
sbtest15.ibd   sbtest21.ibd  sbtest28.ibd  sbtest34.ibd  sbtest40.ibd  sbtest47.ibd  sbtest53.ibd  sbtest5.ibd   sbtest66.ibd  sbtest72.ibd  sbtest79.ibd  sbtest85.ibd  sbtest91.ibd  sbtest98.ibd

如果生成的数据量太大,/目录下放不下:
可以建立一个软连接(假设/home空间大):

mv /data /home/mysql_data
ln -s /home/mysql_data/data /data

删除操作:

[root@localhost sysbench-0.5-script]# /home/sysbench-0.5/sysbench/sysbench --db-driver=mysql --test=/home/sysbench-0.5/sysbench/tests/db/parallel_prepare.lua --oltp-test-mode=complex --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-db=sysbench --mysql-user=root --mysql-password=123456 --max-time=7200 --max-requests=0 --mysql-table-engine=innodb --oltp-table-size=10000 --oltp-tables-count=100 --rand-type=special --rand-spec-pct=100 --num-threads=16 cleanup
sysbench 0.5:  multi-threaded system evaluation benchmarkDropping table 'sbtest1'...
Dropping table 'sbtest2'...
Dropping table 'sbtest3'...
Dropping table 'sbtest4'...
Dropping table 'sbtest5'...

测试脚本:

wget https://mirrors.huaweicloud.com/kunpeng/archive/kunpeng_solution/database/scripts/sysbench-0.5-script.zip --no-check-certificate
[root@localhost sysbench]# unzip sysbench-0.5-script.zip
[root@localhost sysbench-0.5-script]# ls
data_filter.sh  runall.sh        test_oltp_delete.sh    test_oltp_index.sh  test_oltp_nonindex.sh  test_oltp_point.sh   test_oltp_sum.sh
prepare.sh      run_sysbench.sh  test_oltp_distinct.sh  test_oltp_mix.sh    test_oltp_order.sh     test_oltp_simple.sh

里面包含了8个场景和一个mix场景的测试脚本,以mix场景测试为例(需要登录数据库):

chmod 777 *
./test_oltp_mix.sh -h 127.0.0.1  -P 3306  -u root -p 123456  -D sysbench -C 100 -S 10000 -t 16 -c run

-D sysbench : 选择sysbench数据库

只要数据库没重启,执行写场景(INDEX、NONINDEX、DELETE)之前,需要执行1次mix场景进行预热。

输出如下:

[root@localhost sysbench-0.5-script]# ./test_oltp_mix.sh -h 127.0.0.1  -P 3306  -u root -p 123456  -D sysbench -C 100 -S 10000 -t 16 -c run
CMD=run ENGINE=innodb
sysbench 0.5:  multi-threaded system evaluation benchmarkRunning the test with following options:
Number of threads: 16
Report intermediate results every 1 second(s)
Random number generator seed is 0 and will be ignoredForcing shutdown in 121 secondsInitializing worker threads...Threads started![   1s] threads: 16, tps: 549.88, reads: 7883.31, writes: 2227.52, response time: 46.10ms (95%), errors: 0.00, reconnects:  0.00
[   2s] threads: 16, tps: 590.98, reads: 8282.75, writes: 2362.93, response time: 45.58ms (95%), errors: 0.00, reconnects:  0.00
[   3s] threads: 16, tps: 619.63, reads: 8649.90, writes: 2479.54, response time: 42.47ms (95%), errors: 0.00, reconnects:  0.00
[   4s] threads: 16, tps: 414.05, reads: 5781.72, writes: 1665.21, response time: 111.58ms (95%), errors: 0.00, reconnects:  0.00
[   5s] threads: 16, tps: 445.20, reads: 6252.83, writes: 1770.80, response time: 93.83ms (95%), errors: 0.00, reconnects:  0.00...[ 119s] threads: 16, tps: 562.10, reads: 7868.40, writes: 2243.40, response time: 49.40ms (95%), errors: 0.00, reconnects:  0.00
[ 120s] threads: 16, tps: 642.05, reads: 8928.74, writes: 2537.21, response time: 42.46ms (95%), errors: 0.00, reconnects:  0.00
OLTP test statistics:queries performed:read:                            988078write:                           282308other:                           141154total:                           1411540transactions:                        70577  (588.03 per sec.)read/write requests:                 1270386 (10584.47 per sec.)other operations:                    141154 (1176.05 per sec.)ignored errors:                      0      (0.00 per sec.)reconnects:                          0      (0.00 per sec.)General statistics:total time:                          120.0236stotal number of events:              70577total time taken by event execution: 1920.0367sresponse time:min:                                  4.85msavg:                                 27.20msmax:                                322.16msapprox.  95 percentile:              49.79msThreads fairness:events (avg/stddev):           4411.0625/31.27execution time (avg/stddev):   120.0023/0.01

注意

安装mysql,在第一次启动前,要初始化数据库,完成data文件夹初始化,和密码初始化。
启动mysql后,再执行登录操作
一般生成大量数据较慢,频繁测试建议把数据存到/data/路径下,下次拷贝过来直接用
可以参考test_oltp_mix.s 自定义脚本

常用操作

查看数据库进程

ps -ef | grep mysql

查看数据库版本

[mysql@localhost mysql]$ mysql -V
mysql  Ver 8.0.29 for Linux on x86_64 (Source distribution)

查看数据库监测端口

 yum -y install net-toolsnetstat -anptnetstat -anpt | grep mysqlnetstat -anpt | grep 3306

启动,关闭数据库

mysql> show processlist;

可能遇到的问题

不同yum源 install的路径可能不一样,需要在my.cnf中适配
某些操作失败,尝试关闭selinux
mysqld: Can't create/write to file '/data/mysql/tmp/ibV4zkJM
[root@localhost local]# getenforce
Enforcing
[root@localhost local]# setenforce 0
[root@localhost local]# getenforce
Permissive

查看SELinux状态及关闭SELinux

初始化/启动数据库失败,DATA路径无效
[root@localhost local]# 2023-06-21T03:27:55.469633Z 0 [Warning] [MY-010918] [Server] 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead.
2023-06-21T03:27:55.469650Z 0 [System] [MY-010116] [Server] /usr/libexec/mysqld (mysqld 8.0.29) starting as process 8154
2023-06-21T03:27:55.475745Z 0 [Warning] [MY-010075] [Server] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 9c9f84fb-0fe3-11ee-b5c5-000c29d346e8.
2023-06-21T03:27:55.481920Z 1 [ERROR] [MY-011011] [Server] Failed to find valid data directory.
2023-06-21T03:27:55.482154Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2023-06-21T03:27:55.482230Z 0 [ERROR] [MY-010119] [Server] Aborting
2023-06-21T03:27:55.482810Z 0 [System] [MY-010910] [Server] /usr/libexec/mysqld: Shutdown complete (mysqld 8.0.29)  Source distribution.

解决方案:删除data目录,重建相应文件夹,然后重新初始化

service mysql start 失败
[mysql@localhost mysql]$ service mysql start
Redirecting to /bin/systemctl start mysql.service
Failed to start mysql.service: Interactive authentication required.
See system logs and 'systemctl status mysql.service' for details.

原因:MySQL没有加入service服务

chmod 777 /usr/local/mysql/support-files/mysql.server
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql onchown -R mysql:mysql /etc/init.d/mysql
ll /etc/init.d/mysql
22.03 找不到 mysql.server

不用server 方式启动,用mysqld 方式启动

找不到 .sock 文件
[root@localhost ~]# /usr/local/mysql/bin/mysql -uroot -p -S /data/mysql/run/mysql.sock
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/data/mysql/run/mysql.sock' (2)

启动数据库后才会有这个文件

安装sysbench时 执行./configure报错,缺少mysql-lib
configure: error: mysql_config executable not found
********************************************************************************
ERROR: cannot find MySQL libraries. If you want to compile with MySQL support,please install the package containing MySQL client libraries and headers.On Debian-based systems the package name is libmysqlclient-dev.On RedHat-based systems, it is mysql-devel.If you have those libraries installed in non-standard locations,you must either specify file locations explicitly using--with-mysql-includes and --with-mysql-libs options, or make sure path tomysql_config is listed in your PATH environment variable. If you want todisable MySQL support, use --without-mysql option.
********************************************************************************

解决方法:

yum install mariadb-devel

这里install mysql-devel 也会解决这个问题,但是在后续make的时候会报下面的错误,可能openEuler上的mysql-devel包没适配my_bool,用mariadb-devel代替

make[2]: 进入目录“/home/sysbench/sysbench-0.5/sysbench/drivers”
Making all in mysql
make[3]: 进入目录“/home/sysbench/sysbench-0.5/sysbench/drivers/mysql”
gcc -DHAVE_CONFIG_H -I. -I../../../config  -I/usr/include/mysql -m64  -I../../../sysbench -D_XOPEN_SOURCE=500 -D_GNU_SOURCE  -W -Wall -Wextra -Wpointer-arith -Wbad-function-cast   -Wstrict-prototypes -Wnested-externs -Winline   -funroll-loops  -Wundef -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wcast-align         -O2 -ggdb3  -MT libsbmysql_a-drv_mysql.o -MD -MP -MF .deps/libsbmysql_a-drv_mysql.Tpo -c -o libsbmysql_a-drv_mysql.o `test -f 'drv_mysql.c' || echo './'`drv_mysql.c
drv_mysql.c: 在函数‘mysql_drv_bind_param’中:
drv_mysql.c:535:3: 错误:unknown type name ‘my_bool’; did you mean ‘bool’?535 |   my_bool rc;|   ^~~~~~~|   bool
drv_mysql.c:568:23: 警告:assignment to ‘_Bool *’ from incompatible pointer type ‘char *’ [-Wincompatible-pointer-types]568 |       bind[i].is_null = params[i].is_null;|                       ^
drv_mysql.c: 在函数‘mysql_drv_bind_result’中:
drv_mysql.c:618:3: 错误:unknown type name ‘my_bool’; did you mean ‘bool’?618 |   my_bool rc;|   ^~~~~~~|   bool
drv_mysql.c:633:21: 警告:assignment to ‘_Bool *’ from incompatible pointer type ‘char *’ [-Wincompatible-pointer-types]633 |     bind[i].is_null = params[i].is_null;|                     ^
make[3]: *** [Makefile:440:libsbmysql_a-drv_mysql.o] 错误 1
make[3]: 离开目录“/home/sysbench/sysbench-0.5/sysbench/drivers/mysql”
make[2]: *** [Makefile:415:all-recursive] 错误 1
make[2]: 离开目录“/home/sysbench/sysbench-0.5/sysbench/drivers”
make[1]: *** [Makefile:586:all-recursive] 错误 1
make[1]: 离开目录“/home/sysbench/sysbench-0.5/sysbench”
make: *** [Makefile:468:all-recursive] 错误 1
拷贝文件后重新运行数据库,发现数据库自动关闭
cat /data/mysql/log/mysql.log

查看错误日志,发现是找不到bin.index,但这个文件是存在的。
原因:copy文件时没有修改文件owner,

chown -R mysql:mysql /data/mysql/
ll /data/mysql/data/

参考链接

文档首页>鲲鹏BoostKit数据库使能套件>开源使能>MySQL>安装指南
文档首页>鲲鹏BoostKit数据库使能套件>测试指导>测试指导>Sysbench 0.5 测试指导

my.cnf 相关
MySQL 配置文件 my.cnf / my.ini 逐行详解
mysql配置my.cnf中!include和!includedir的作用

mysql 程序概述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/641650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL修炼手册12:视图:简化复杂查询与保护数据

写在开头 欢迎阅读MySQL修炼手册的第12篇&#xff0c;今天我们将深入探讨MySQL中的视图&#xff0c;了解如何利用视图简化复杂查询并保护敏感数据。 1 视图的基本概念 在开始学习视图之前&#xff0c;让我们先了解一下视图的基本概念。视图是一种虚拟的表&#xff0c;它是基…

限流算法 漏桶算法、令牌桶算法

并不能说明令牌桶一定比漏洞好&#xff0c;她们使用场景不一样。令牌桶可以用来保护自己&#xff0c;主要用来对调用者频率进行限流&#xff0c;为的是让自己不被打垮。所以如果自己本身有处理能力的时候&#xff0c;如果流量突发&#xff08;实际消费能力强于配置的流量限制&a…

cpu温度监测工具 -- Turbo Boost Switcher Pro

Turbo Boost Switcher Pro是一款专为Mac电脑设计的CPU性能管理软件&#xff0c;它的技术背后是Intel Turbo Boost。Turbo Boost技术是一项能够自动加速处理器主频的技术&#xff0c;为Mac电脑提供更强大的计算能力。然而&#xff0c;这项技术在使用过程中会产生更多热量&#x…

秒杀场景下的业务梳理——Redis分布式锁的优化

秒杀场景下的业务梳理——Redis分布式锁的优化 随着互联网的快速发展&#xff0c;商品秒杀的场景我们并不少见&#xff1b;秒杀是一种供不应求的&#xff0c;高并发的场景&#xff0c;它里面包含了很多技术点&#xff0c;掌握了其中的技术点&#xff0c;虽不一定能让你面试立马…

如何恢复最近删除的照片?掌握这些技巧是关键

在手机摄影成为我们日常生活不可或缺的一部分的今天&#xff0c;珍贵的照片记录着我们生活中的重要瞬间。然而&#xff0c;有时候在整理照片时&#xff0c;我们可能会不慎删除一些我们本不想失去的回忆。幸运的是&#xff0c;针对最近删除的照片&#xff0c;掌握一些关键的技巧…

表达式计算

四则运算表达式可以用表达式树表达&#xff0c;如下图后序遍历 现给你一个字符串&#xff0c;代表一个后序遍历形式的四则运算表达式&#xff0c;请计算出表达式的结果&#xff1a;(只输出整数部分) 注&#xff1a;除法只保留整数部分&#xff1b;5/4 1 输入&#xff1a; 一个…

jenkins安装配置,使用Docker发布maven项目全过程记录(2)

2、使用Docker发布Maven项目过程的配置 首先说明&#xff0c;在这里仅介绍我使用Jenkins的发布过程的配置&#xff0c;不涉及Dockerfile、docker-compose.yml文件的内容。 2.1 创建Item 在这里&#xff0c;输入item名称&#xff0c;我使用的Freestyle project&#xff0c;点击…

机器学习实验2——线性回归求解加州房价问题

文章目录 &#x1f9e1;&#x1f9e1;实验内容&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;数据预处理&#x1f9e1;&#x1f9e1;代码缺失值处理特征探索相关性分析文本数据标签编码数值型数据标准化划分数据集 &#x1f9e1;&#x1f9e1;线性回归&#x1f9e1;&am…

CLIP探索笔记

CLIP探索笔记 记录CLIP的流水账&#xff0c;训练和推理是如何完成的&#xff1f; 每一次阅读都有不同的领悟和发现&#xff0c;一些简单的想法。 官方信息 CodePaperBlog只有预测代码模型&#xff0c;没有训练代码 它想干嘛&#xff1f; 他想做一个分类任务&#xff0c;一…

测试经理面试初体验

家人们谁懂啊&#xff0c;我在海口实在难找计算机类的实习&#xff0c;就直接在BOss上海投了&#xff0c;结果一个hr直接给我弄了个测试经理的面试&#xff08;可能年底冲业绩吧&#xff09;&#xff0c;然后就在明天下午&#xff0c;我直接抱下f脚了&#xff0c;就当体验一下~…

网络安全小白进阶试题——附答案

选择题&#xff08;每题1分&#xff0c;共20分&#xff09; 攻击者通过发送大量伪造的网络数据包&#xff0c;使目标网络资源不可用的攻击类型是&#xff1f; A) PhishingB) DDoSC) SpoofingD) Malware 下列哪项是一种常见的社交工程攻击&#xff1f; A) Firewall bypassB) Bru…

【MySQL故障】主从延迟越来越大

问题背景 研发执行了一个批量更新数据的操作&#xff0c;操作的表是个宽表&#xff0c;大概有90多个字段&#xff0c;数据量有800多w&#xff0c;但是研发是根据ID按行更新。更新开始后&#xff0c;该集群的主从延迟越来越大。 问题现象 1 从库应用binlog基本无落后&#x…

翻毛皮鞋脏了不会清洗怎么办?资深劳保鞋厂家来教你

劳保鞋皮面材质中除了常见的牛皮材质&#xff0c;翻毛皮也是频繁使用的材料&#xff0c;材质不同&#xff0c;在养护上也有区别&#xff0c;今天百华小编来和大家聊聊翻毛皮材质的鞋子清洁方法。 翻毛皮鞋清洗前的准备工作 1.除灰&#xff1a;对于表面灰尘&#xff0c;可以使用…

手机上菜谱记录簿在哪 用备忘录放大看菜谱更清晰

作为一个热爱生活的现代人&#xff0c;我深知健康饮食的重要性。然而&#xff0c;每当我想亲手为自己和家人烹饪美食时&#xff0c;厨艺的不精常常让我望而却步。好在互联网时代&#xff0c;网上搜罗的各式菜谱成了我的救星。但问题是&#xff0c;每次做菜时都得反复查找&#…

JDX图片识别工具1.0版本发布啦

软件介绍 软件核心功能软件界面软件下载软件教程 软件核心功能 工作当中经常处理大量的图片&#xff0c;网上搜索的工具都无法满足需求&#xff0c;因此自己研发批量图片识别工具。 目前还是内测版&#xff0c;1.0版本主要包含如下特性&#xff1a; 批量识别图片&#xff0c…

前端上传大文件使用分片上传

前提:分片上传针对于一些大的文件、普通大小的文件使用element中的上传组件可以实现效果,例如几G的文件就会比较卡,所以这时候就需要用到分片上传~ 前端及后端分片上传笔记 效果:(上传进度展示) 效果:(上传成功的效果展示) 1、 新建一个上传组件 2、使用vue-simple-…

开始学习vue2基础篇(初体验)

一、什么是VUE&#xff08;官网 &#xff1a;https://cn.vuejs.org/&#xff09; 官方给出的概念 &#xff1a;Vue (读音 /vju ː/ &#xff0c;类似于 view) 是一套用 于构建用户界面的前端框架 渐进式的 JavaScript 框架 二、VUE的特点 易用 &#xff1a;基础只需HTML、CSS、…

如何优雅的发布一个 TypeScript 软件包?

向 NPM 发布软件包本身并不是一个特别困难的挑战。但是&#xff0c;配置你的 TypeScript 项目以取得成功可能是一个挑战。你的软件包能在大多数项目上运行吗&#xff1f;用户能否使用类型提示和自动完成功能&#xff1f;它能与 ES Modules (ESM) 和 CommonJS (CJS) 风格的导入一…

正则表达式、grep过滤工具、sed基本用法、sed基本操作指令、sed应用案例

1 案例1&#xff1a;使用正则表达式 1.1 问题 本案例要求熟悉正则表达式的编写&#xff0c;完成以下任务&#xff1a; 利用grep或egrep工具练习正则表达式的基本用法 1.2 方案 表&#xff0d;1 基本正则列表 表&#xff0d;2 扩展正则列表 1.3 步骤 实现此案例需要按照如…

算法训练 day28 | 93.复原IP地址 78.子集 90.子集II

93.复原IP地址 题目链接:复原IP地址 视频讲解:回溯算法如何分割字符串并判断是合法IP&#xff1f; 递归 1、确定递归函数返回值和参数 声明一个全局变量&#xff08;字符串数组&#xff09;&#xff0c;保存满足条件的字符串作为结果。分割和加 . 时直接对原字符串进行处理…