以往 MySQL 想要限制单个连接的内存,只能小心翼翼的设置各种 SESSION 变量,防止执行某些 SQL 导致单个连接的内存溢出! 能不能直接在 MySQL 服务端包含这样一个功能,简化数据库的运维呢?
MySQL 最新版本 8.0.28 在前几天发布,其中有一项新功能就是在数据库侧来限制单个连接内存,着实有点小兴奋。
管理员端设置内存限制参数上限:为了尽快看到效果,设置为最小值。
创建一个新用户 tt1 ,并赋予基于库 ytt 的只读权限。
创建一张表,插入一行记录: 这里使用 longtext 数据类型能让查询结果更快内存溢出。
用户 tt1 登录验证:对字段 r1 进行简单 GROUP BY 检索 , 报连接内存超出设定限制错误,连接关闭。
不过这个新功能对管理员和内置用户不生效。 用 ROOT 用户重新登录 MySQL 执行刚才那条 SQL :
MySQL 5.7 新增默认账号 mysql.session和mysql.syshttps://www.jianshu.com/p/427cac0d8763Privileges Supported by MySQLhttps://dev.mysql.com/doc/refman/5.7/en/grant.htmlMySQL 5.7 Reference Manual/Reserved Accountshttps://dev.mysql.com/doc/refman/5.7/en/reserved-users.htmlWhat are mysql.session@localhost and mysql.sys@localhost user accounts good for?https://stackoverflow.com/questions/46149220/what-are-mysql-sessionlocalhost-and-mysql-syslocalhost-user-accounts-good-forOne part of the MySQL installation process is data directory initialization (see Section 2.10.1, “Initializing the Data Directory” ). During data directory initialization, MySQL creates user accounts that should be considered reserved:'root'@'localhost : Used for administrative purposes. This account has all privileges and can perform any operation. Strictly speaking, this account name is not reserved, in the sense that some installations rename the root account to something else to avoid exposing a highly privileged account with a well-known name.'mysql.sys'@'localhost' : Used as the DEFINER for sys schema objects. Use of the mysql.sys account avoids problems that occur if a DBA renames or removes the root account. This account is locked so that it cannot be used for client connections.'mysql.session'@'localhost' : Used internally by plugins to access the server. This account is locked so that it cannot be used for client connections.用于sys schema中对象的定义。使用mysql.sys用户可避免DBA重命名或者删除root用户时发生的问题。该用户已被锁定,客户端无法连接。插件内部使用来访问服务器。该用户已被锁定,客户端无法连接。root账号,其用于管理。该用户拥有所有权限,可执行任何 *** 作。 root是MySQL的特权账号,这个众所周知,也带来安全隐患,建议将root账号禁用或者删除,新建一个特权账号用于管理。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)