MySQL5.7.34 CentOS7.6编译安装全攻略
  TEZNKK3IfmPf 2023年11月13日 18 0

前言

        MySQL5.6.44被扫描出如下的漏洞

系统检测到(35.241.246.12)存在漏洞:MySQL   Server安全漏洞(CVE-2019-2924),当前应用版本:5.6.44.    
系统检测到(35.241.246.12)存在漏洞:MySQL Server安全漏洞(CVE-2019-2922),当前应用版本:5.6.44.
系统检测到(35.241.246.12)存在漏洞:MySQL Server安全漏洞(CVE-2019-2923),当前应用版本:5.6.44.
系统检测到(35.241.246.12)存在漏洞:MySQL Server安全漏洞(CVE-2019-2911),当前应用版本:5.6.44.
系统检测到(35.241.246.12)存在漏洞:MySQL Server安全漏洞(CVE-2019-2910),当前应用版本:5.6.44.
系统检测到(35.241.246.12)存在漏洞:MySQL Server安全漏洞(CVE-2019-2974),当前应用版本:5.6.44.
系统检测到(35.241.246.12)存在漏洞:MySQL Server安全漏洞(CVE-2019-2969),当前应用版本:5.6.44.
系统检测到(35.241.246.12)存在漏洞:MySQL Server安全漏洞(CVE-2020-2579),当前应用版本:5.6.44.
系统检测到(35.241.246.12)存在漏洞:MySQL Server安全漏洞(CVE-2020-2574),当前应用版本:5.6.44.
系统检测到(35.241.246.12)存在漏洞:MySQL Server安全漏洞(CVE-2020-2814),当前应用版本:5.6.44.
系统检测到(35.241.246.12)存在漏洞:MySQL Server安全漏洞(CVE-2020-2812),当前应用版本:5.6.44.
系统检测到(35.241.246.12)存在漏洞:MySQL Server安全漏洞(CVE-2020-2804),当前应用版本:5.6.44.
系统检测到(35.241.246.12)存在漏洞:MySQL Server安全漏洞(CVE-2020-2780),当前应用版本:5.6.44.
系统检测到(35.241.246.12)存在漏洞:MySQL Server安全漏洞(CVE-2020-2763),当前应用版本:5.6.44.
系统检测到(35.241.246.12)存在漏洞:MySQL Server安全漏洞(CVE-2020-2752),当前应用版本:5.6.44.
系统检测到(35.241.246.12)存在漏洞:MySQL Server安全漏洞(CVE-2020-14559),当前应用版本:5.6.44.
系统检测到(35.241.246.12)存在漏洞:MySQL Server安全漏洞(CVE-2020-14550),当前应用版本:5.6.44.
系统检测到(35.241.246.12)存在漏洞:MySQL Server安全漏洞(CVE-2020-14539),当前应用版本:5.6.44.

 

  升级到MySQL5.7.30版本,被扫描出如下漏洞

系统检测到(35.241.246.238)存在漏洞:MySQL Server安全漏洞(CVE-2020-14559),当前应用版本:5.7.30.
系统检测到(35.241.246.238)存在漏洞:MySQL Server安全漏洞(CVE-2020-14547),当前应用版本:5.7.30.
系统检测到(35.241.246.238)存在漏洞:MySQL Server安全漏洞(CVE-2020-14540),当前应用版本:5.7.30.
系统检测到(35.241.246.238)存在漏洞:MySQL Server安全漏洞(CVE-2020-14550),当前应用版本:5.7.30.
系统检测到(35.241.246.238)存在漏洞:MySQL Server安全漏洞(CVE-2020-14576),当前应用版本:5.7.30.
系统检测到(35.241.246.238)存在漏洞:MySQL Server安全漏洞(CVE-2020-14539),当前应用版本:5.7.30.

 

  更新到最新的版本5.7.34 ​​MySQL :: Download MySQL Community Server​​

解决漏洞问题,如果单纯需要修复某一个漏洞,需要登陆​​Oracle Critical Patch Update Advisory - July 2020​​,并且登陆官网,通过交服务费的方式获取到补丁包

另外的方案:替换3306默认端口为54789,证实有效

准备环境

CentOS Linux release 7.6.1810 (AltArch)

yum安装已有的GCC(gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)),通过scl安装GCC(gcc version 7.3.1 20180303 (Red Hat 7.3.1-5) (GCC) )

MySQL5.7.34版本源码依赖高版本的GCC,启用7.3版本GCC :scl enable devtoolset-7 bash

1.将官网下载的最新版本mysql-community-8.0.25-1.el7.src.rpm下载解包

rpm2cpio mysql-community-8.0.25-1.el7.src.rpm | cpio -id

 

2. 解压缩源码包mysql编译依赖boost库

tar -zxvf mysql-5.7.34.tar.gz
tar -jxvf boost_1_59_0.tar.bz2

 

3. 进入目录,创建build编译目录

cd mysql-5.7.34
mkdir build && cd build

 

4. cmake ../ -DCMAKE_INSTALL_PREFIX=/opt/mysql  -DMYSQL_DATADIR=/opt/mysql/var  -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DENABLE_DTRACE=0 -DDEFAULT_CHARSET=utf8mb4  -DDEFAULT_COLLATION=utf8mb4_general_ci -DWITH_EMBEDDED_SERVER=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/opt/mysql-5.7.34/boost_1_59_0

5. make 

6. make install 

问题1)make编译出现错误:error: could not split insn

/opt/mysql-src/mysql-5.7.30/storage/innobase/handler/handler0alter.cc:9015:1: error: could not split insn
}
^
(insn 7329 19670 19672 (parallel [
(set (reg:DI 0 x0 [orig:834 D.184765 ] [834])
(plus:DI (mem/v:DI (reg/f:DI 28 x28 [2541]) [-1 S8 A64])
(const_int 536870912 [0x20000000])))
(set (mem/v:DI (reg/f:DI 28 x28 [2541]) [-1 S8 A64])
(unspec_volatile:DI [
(mem/v:DI (reg/f:DI 28 x28 [2541]) [-1 S8 A64])
(const_int 536870912 [0x20000000])
(const_int 5 [0x5])
] UNSPECV_ATOMIC_OP))
(clobber (reg:CC 66 cc))
(clobber (reg:SI 9 x9))
]) /opt/mysql-src/mysql-5.7.30/storage/innobase/include/sync0rw.ic:317 1856 {atomic_add_fetchdi}
(expr_list:REG_UNUSED (reg:CC 66 cc)
(expr_list:REG_UNUSED (reg:SI 9 x9)
(nil))))
/opt/mysql-src/mysql-5.7.30/storage/innobase/handler/handler0alter.cc:9015:1: internal compiler error: in final_scan_insn, at final.c:2897
Please submit a full bug report,
with preprocessed source if appropriate.
See for instructions.
Preprocessed source stored into /tmp/ccCdCpCd.out file, please attach this to your bugreport.
make[2]: *** [storage/innobase/CMakeFiles/innobase_embedded.dir/build.make:726: storage/innobase/CMakeFiles/innobase_embedded.dir/handler/handler0alter.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:2378: storage/innobase/CMakeFiles/innobase_embedded.dir/all] Error 2
make: *** [Makefile:163: all] Error 2
[root@taishan-atlas build]# cmake -version
cmake version 3.12.3
CMake suite maintained and supported by Kitware (kitware.com/cmake).

 

 

问题原因:环境中有gcc -4.8.5的没有卸载

问题解决:yum -y remove gcc

如果把gcc version 7.3.1一同卸载,重新安装

 

问题2)/usr/bin/c++: No such file or directory

/bin/sh: /usr/bin/c++: No such file or directory
make[2]: *** [mysys_ssl/CMakeFiles/mysys_ssl.dir/build.make:63: mysys_ssl/CMakeFiles/mysys_ssl.dir/crypt_genhash_impl.cc.o] Error 127
make[1]: *** [CMakeFiles/Makefile2:1320: mysys_ssl/CMakeFiles/mysys_ssl.dir/all] Error 2
make: *** [Makefile:163: all] Error 2

 

解决:重新建立链接 ln -s /usr/bin/gcc  /usr/bin/cc /usr/bin/c++

 

问题3)make编译出错

../archive_output_directory/libmysys_ssl.a(my_default.cc.o):(.data.DW.ref.__gxx_personality_v0[DW.ref.__gxx_personality_v0]+0x0): undefined reference to `__gxx_personality_v0'
collect2: error: ld returned 1 exit status
make[2]: *** [extra/CMakeFiles/comp_err.dir/build.make:94: extra/comp_err] Error 1
make[1]: *** [CMakeFiles/Makefile2:6587: extra/CMakeFiles/comp_err.dir/all] Error 2
make: *** [Makefile:163: all] Error 2

 

解决:删除cmake下的build的中间目录,编译的时候引用了GCC4.8.3的参与了编译,make clean不一定有效

 

问题4)修复源码中的头文件缺少问题

编辑sql/mysqld.cc 添加头文件#include <sys/prctl.h>

/opt/mysql-src/mysql-5.7.30/sql/mysqld.cc: In function 'passwd* check_user(const char*)':
/opt/mysql-src/mysql-5.7.30/sql/mysqld.cc:1565:12: error: 'prctl' was not declared in this scope
(void) prctl(PR_SET_DUMPABLE, 1);
^~~~~
make[2]: *** [sql/CMakeFiles/sql.dir/build.make:2829: sql/CMakeFiles/sql.dir/mysqld.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:8317: sql/CMakeFiles/sql.dir/all] Error 2
make: *** [Makefile:163: all] Error 2

 

重新make编译

默认情况下,MySQL服务或者客户端都会读取/etc/my.cnf作为配置文件,除非指定default-file

编写/etc/my.cnf配置文件

[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
event_scheduler = ON
innodb_file_format=barracuda
innodb_large_prefix=on
lower_case_table_names=1
port = 3306
socket = /tmp/mysql.sock
datadir = /opt/mysql/var
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
thread_cache_size = 8
query_cache_size = 8M
tmp_table_size = 16M
table_open_cache = 64
explicit_defaults_for_timestamp = true
#skip-networking
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535
log-bin=mysql-bin
binlog_format=mixed
server-id = 1
expire_logs_days = 10
#loose-innodb-trx=0
#loose-innodb-locks=0
#loose-innodb-lock-waits=0
#loose-innodb-cmp=0
#loose-innodb-cmp-per-index=0
#loose-innodb-cmp-per-index-reset=0
#loose-innodb-cmp-reset=0
#loose-innodb-cmpmem=0
#loose-innodb-cmpmem-reset=0
#loose-innodb-buffer-page=0
#loose-innodb-buffer-page-lru=0
#loose-innodb-buffer-pool-stats=0
#loose-innodb-metrics=0
#loose-innodb-ft-default-stopword=0
#loose-innodb-ft-inserted=0
#loose-innodb-ft-deleted=0
#loose-innodb-ft-being-deleted=0
#loose-innodb-ft-config=0
#loose-innodb-ft-index-cache=0
#loose-innodb-ft-index-table=0
#loose-innodb-sys-tables=0
#loose-innodb-sys-tablestats=0
#loose-innodb-sys-indexes=0
#loose-innodb-sys-columns=0
#loose-innodb-sys-fields=0
#loose-innodb-sys-foreign=0
#loose-innodb-sys-foreign-cols=0
default_storage_engine = InnoDB
#innodb_data_home_dir = /usr/local/mysql/var
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /usr/local/mysql/var
#innodb_buffer_pool_size = 16M
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout

 

配置启动脚本

cp /opt/mysql/support-files/mysql.server  /etc/init.d/mysql

chmod +x /etc/init.d/mysql

chkconfig  --add  mysql

9创建mysql用户

groupadd mysql

useradd -g mysql -s /sbin/nologin mysql

chown -R mysql:mysql /opt/mysql //授权读写数据库的权限

chown -R mysql:mysql /tmp //授权读写临时文件的权限

10初始化数据库

/opt/mysql/bin/mysql_install_db --defaults-file=/etc/my.cnf --basedir=/opt/mysql --datadir=/opt/mysql/var --user=mysql

 

11设置环境变量

echo "export PATH=$PATH:/opt/mysql/bin/"  >> /etc/profile

source /etc/profile

12 测试MySQL程序是否正常运行

[root@localhost bin]# ./mysqld --user=mysql

停止服务可以使用mysqladmin -uroot -proot shutdown

12设置root用户密码

初始化没有密码可以设置:mysqladmin -u root password 'root'

修改密码:mysqladmin -uroot -proot password  'root'

 

13登陆数据库,授权远程访问权限

mysql -uroot -proot

(1) root用户使用密码从任何主机连接到mysql服务器:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

(2) 开启root用户远程连接到mysql服务器

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

(3)刷新权限: flush privileges;

 

14开启访问端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent

firewall-cmd --reload

 

问题记录

1)[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist

解决:发现/etc目录下,并没有MySQL数据库的配置文件my.cnf,拷贝配置,解决问题

2) 现场新建一个磁盘分区存放MySQL数据库data数据(拷贝已有的数据过去),启动MySQL提示异常出错:

 /opt/mysql/bin/mysqld: File ‘./mysql-bin.index' not found (Errcode: 13)

140726  0:31:19 [ERROR] Aborting

140726  0:31:19 [Note]  /opt/mysql/bin/mysqld: Shutdown complete

通过查看/opt/mysql/var/文件夹中文件的所属权限

[root@localhost var]# ll

total 110692

-rw-rw----. 1 mysql mysql       56 Aug  5 03:02 auto.cnf

-rw-rw----. 1 mysql mysql 12582912 Nov 24 04:21 ibdata1

-rw-rw----. 1 mysql mysql 50331648 Nov 24 04:21 ib_logfile0

-rw-rw----. 1 mysql mysql 50331648 Aug  5 03:00 ib_logfile1

-rw-rw----. 1 mysql mysql    57311 Nov 24 04:17 localhost.localdomain.err

-rw-rw----. 1 root  root         5 Nov 24 04:21 localhost.pid

drwx------. 2 mysql mysql     4096 Aug  5 03:00 mysql

-rw-rw----. 1 mysql mysql      143 Nov 24 04:07 mysql-bin.000013

-rw-rw----. 1 mysql mysql      120 Nov 24 04:13 mysql-bin.000014

-rw-rw----. 1 mysql mysql      143 Nov 24 04:13 mysql-bin.000015

-rw-rw----. 1 mysql mysql      120 Nov 24 04:17 mysql-bin.000016

-rw-rw----. 1 mysql mysql      120 Nov 24 04:21 mysql-bin.000017

-rw-rw----. 1 root  root       120 Nov 24 04:21 mysql-bin.000018

-rw-rw----. 1 root  root       114 Nov 24 04:21 mysql-bin.index

drwx------. 2 mysql mysql     4096 Aug  5 03:02 performance_schema

drwx------. 2 mysql mysql        6 Aug  5 03:00 test

localhost.pid文件和mysql-bin.index文件是root权限,因此导致了上述的问题

解决

        这种问题一般都是权限访问问题,授权下var数据库文件的数据,  chown -R mysql:mysql  /opt/mysql/var/

注意

        授权过程中少了-R,导致没有递归循环授权该文件

3)The server quit without updating PID file 

[root@localhost bin]# service mysql start

Starting MySQL. ERROR! The server quit without updating PID file (/opt/mysql-5.6.44/var/localhost.localdomain.pid).

[root@localhost bin]# ./mysqld --user=mysql

2020-11-24 04:09:42 0 [Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled

2020-11-24 04:09:42 0 [Note] ./mysqld (mysqld 5.6.44-log) starting as process 2288 ...

./mysqld: File './mysql-bin.index' not found (Errcode: 13 - Permission denied)

#这里已经提示权限不允许

2020-11-24 04:09:42 2288 [ERROR] Aborting

2020-11-24 04:09:42 2288 [Note] Binlog end

2020-11-24 04:09:42 2288 [Note] ./mysqld: Shutdown complete

发现

        通过./mysqld --user=root可以启动MySQL,但是无法通过mysql用户启动。通过查看/opt/mysql-5.6.44/var/文件夹中文件的所属权限

[root@localhost var]# ll

total 110692

-rw-rw----. 1 mysql mysql       56 Aug  5 03:02 auto.cnf

-rw-rw----. 1 mysql mysql 12582912 Nov 24 04:21 ibdata1

-rw-rw----. 1 mysql mysql 50331648 Nov 24 04:21 ib_logfile0

-rw-rw----. 1 mysql mysql 50331648 Aug  5 03:00 ib_logfile1

-rw-rw----. 1 mysql mysql    57311 Nov 24 04:17 localhost.localdomain.err

-rw-rw----. 1 root  root         5 Nov 24 04:21 localhost.pid

drwx------. 2 mysql mysql     4096 Aug  5 03:00 mysql

-rw-rw----. 1 mysql mysql      143 Nov 24 04:07 mysql-bin.000013

-rw-rw----. 1 mysql mysql      120 Nov 24 04:13 mysql-bin.000014

-rw-rw----. 1 mysql mysql      143 Nov 24 04:13 mysql-bin.000015

-rw-rw----. 1 mysql mysql      120 Nov 24 04:17 mysql-bin.000016

-rw-rw----. 1 mysql mysql      120 Nov 24 04:21 mysql-bin.000017

-rw-rw----. 1 root  root       120 Nov 24 04:21 mysql-bin.000018

-rw-rw----. 1 root  root       114 Nov 24 04:21 mysql-bin.index

drwx------. 2 mysql mysql     4096 Aug  5 03:02 performance_schema

drwx------. 2 mysql mysql        6 Aug  5 03:00 test

localhost.pid文件和mysql-bin.index文件是root权限,因此导致了上述的问题

解决方案

            chown -R mysql:mysql  /opt/mysql-5.6.44/var/

产生问题原因

            采用root用户启动MySQL,发现缺失动态库libaio.so文件,这个时候已经创建了root权限的文件,导致再用mysql用户启动MySQL出现问题

注意

            切记不要使用root用户启动MySQL

4)Errcode: 28 - No space left on device

场景:启动MySQL:./mysqld  --user=mysql

mysqld: File './mysql-bin.~rec~' not found (Errcode: 28 - No space left on device

原因:分区节点耗尽,无法创建文件,每一个节点对应一个文件,当创建文件过多,就会耗尽节点。查看当前节点情况

[root@mysql0006 src]# df -i

文件系统          Inode  已用(I) 可用(I) 已用(I)% 挂载点

devtmpfs         518609      306  518303       1% /dev

tmpfs            518773        1  518772       1% /dev/shm

tmpfs            518773      549  518224       1% /run

tmpfs            518773       17  518756       1% /sys/fs/cgroup

/dev/vda2      13041664 12956313   85351     100% /

/dev/vda1             0        0       0        - /boot/efi

tmpfs            518773        1  518772       1% /run/user/0

根文件系统节点几乎耗尽,猜测剩下的是用户级别不可用的。

通过如下的指令,查看目录中的文件个数包括子文件夹的文件个数

[root@taishan-atlas /]# find /opt  -type f -print | wc -l

639825

最终定位到是地图数据超过一千两百万的瓦片数据。申请新的分区,然后

 建立文件系统,指定inode节点数mkfs.ext4  /dev/sdb1  -N  1827635200

5)Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root

场景:版本5.6.44,[ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!此处 mysql是出于安全考虑,默认拒绝用root账号启动mysql服务。

解决1)通过在命令后面加上--user=root 进行强制使用root账号启动

mysqld --user=root

如何指定配置文件my.cnf启动MySQL服务

./mysqld_safe --defaults-file=/opt/mysql/mysql-5.7.27/conf/my.cnf

客户端访问MySQL服务

./mysql -uroot -p  --socket=/opt/mysql/mysql-5.7.27/data/mysql/datadir/3306/data/mysql.sock

如何初始化数据库

./mysqld --initialize --user=root  --basedir=/opt/mysql/mysql-5.7.28/data/mysql/installdir --datadir=/opt/mysql/mysql-5.7.28/data/mysql/datadir/3306/data

注意:一旦采用了--user=root权限启动,会产生root权限才能访问的PID file,这个时候需要chown -R mysql:mysql /opt/mysql/var重新授权mysql用户组的访问权限,否则无法启动

 

6)[Err] 1067 - Invalid default value for 'create_date'

场景

            [Err] 1067 - Invalid default value for 'create_date',对于创建表种的语句如下:

          `create_date` timestamp(0) NOT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '创建时间'

 

解决

MySQL5.6.44以及MySQL5.7.27timestamp设定默认值规则改变,不能为”0000 00-00 00:00:00”

解决方法:

查看sql_mode:

mysql> show session variables like '%sql_mode%';

+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+

| Variable_name | Value                                                                                                                                     |

+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+

| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |

+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.01 sec)

修改sql_mode,去掉NO_ZERO_IN_DATE,NO_ZERO_DATE:

mysql> set sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

 

7)MySQL:dependent on columns in GROUP BY clause解决方案

问题1)

        SELECT list is not in GROUP BY clause and contains nonaggregated column \\'testdb.testtables.plat_id\\' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

问题2)

    [err] 1055 --  'xxx' isn't in GROUP BY

查看数据库是否设置了only_full_group_by属性,该属性会导致上述问题,需要去掉

select @@sql_mode;

修改my.cnf配置文件,添加如下

[mysqld]

sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

说明

SQL-92和更早版本不允许选择列表,HAVING条件或ORDER BY列表引用未在GROUP BY子句中命名的非聚合列的查询。例如,此查询在标准SQL-92中是非法的

MySQL 5.7.5及更高版本实现了对功能依赖的检测。如果ONLY_FULL_GROUP_BY启用了 SQL模式(默认情况下是这样),则MySQL拒绝查询,其中选择列表,HAVING条件或 ORDER BY列表引用非聚合列,这些列既不在GROUP BY子句中命名也不在功能上依赖于它们。(在5.7.5之前,MySQL不检测功能依赖性, ONLY_FULL_GROUP_BY默认情况下不启用。有关5.7.5之前行为的描述,请参阅MySQL 5.6参考手册)

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   31   0   0 数据库mysql
  TEZNKK3IfmPf   2024年05月31日   52   0   0 linux服务器
  TEZNKK3IfmPf   2024年05月31日   30   0   0 linux服务器centos
  TEZNKK3IfmPf   2024年05月31日   29   0   0 linuxbind
TEZNKK3IfmPf