此专题题目较多,因此分为上中下三部分来讲,此为中篇。
完整版题库请到我的资源中下载,此为传送门。 https://download.csdn.net/download/kanon_lgt/85010419?spm=1001.2014.3001.5503
讲解:
mysql8.0的验证插件支持三种:
- mysql_native_password
- sha256_password
- caching_sha2_password
默认的是caching_sha2_password方式,它是sha256_password的超集实现。
题目要求配置为sha256_password,因此要改变mysql8.0的默认设置,需要在配置文件中添加如下设置项:
default_authentication_password=sha256_password
然后重启mysqld服务即可。
看选项:
选项A,validate-user-plugins,此参数的作用是设置是否开启对每个用户或存储过程的可用性验证,可选值为ON/|OFF,默认值为ON。
选项C,default_authencation_plugin=mysql_native_password是设置为本地验证方式。
选项D,create user with sha256_password确实可以对当前用户生效,但不会让mysql默认使用sha256_password作为将来的验证插件。
选项B,default_authencation_plugin=sha256_password,这个才是一劳永逸的设置。
因此,正确选项B。
讲解:
mysql8.0修改密码的方式有两种:
- alter user user@host identified [with caching_sha2_password|sha256_password|mysql_native_password] by 'auth_string'
- set password for user@host = 'auth_string'
题目要求使用dba用户修改一个用户的密码,包括其它其他用户。
看选项:
选项A,mysql_secure_installation,这是加固mysql账户安全设定用的脚本,但并不会修改密码
选项B,mysqladmin 只会修改自己的密码,不会修改其它用户密码
选项C,在mysql8.0,不在允许通过grant方式修改用户密码
因此,正确选项DE。
讲解:
mysql的容量配置要根据业务的过去增长规律、未来发展预测、系统当前的资源运行综合评估,不可盲目扩充硬件内存、磁盘、cpu等硬件资源,避免造成浪费
题目要求对容量做一个有效的规划
看选项:
BEF,买更多的内存、磁盘、CPU,都属于盲目扩容
DG,升级应用程序到最新版本,增加更多的从库节点以分担增长的DML,属于不搭边的选项
A,监控选择系统资源运行情况,属于着眼当下。
C,咨询应用使用团队将来的项目和使用规模,属于着眼未来。
H,基于过去3年的平均增,属于着眼过去。
因此,正确选项ACH。
讲解:
mysql允许在一个主机上运行多个实例,其方式很多,其中官方提供了一个多实例管理组件mysqld_multi。此组件可以根据/etc/my.cnf中配置的多组[mysqld]配置启动多个mysqld服务,在数据文件、内存区域、空间管理上实现彼此独立,互不干扰。
一般的常规做法是多个mysqld实例绑定的是同一个IP地址,使用不同的PORT来实现的资源隔离。
题目要求的确实相反的,要求多个实例使用相同的port,那就要绑定不同的IP地址来实现资源隔离。
看选项:
选项A,mysqld实例间独立的子网掩码,无效方式
选项B,mysqld实例间使用不同的用户账户,无效方式
选项C,实例间使用不同的socket文件名,无效方式。
选项D,实例间使用不同的IP地址。有效。
因此,选项D正确。
讲解:
MySQL server的安全点有很多:
- 尽可能减少mysql服务之外的程序运行在mysql server上
- 尽可能控制具有OS级别权限的mysql用户
- 尽可能控制OS用户的权限颗粒度
- 尽可能避免使用root用户启动mysql服务
题目要求mysql server环境安全
看选项:
选项A,加密文件系统以避免对精确文件系统权限的需求,无厘头的表述
选项B,最小化mysqld服务之外的程序运行数量,符合要求
选项C,严格控制具有OS操作系统权限的用户数量,符合要求
选项D,root用户启动mysqld服务,错误
选项E,确保有文件系统权限的OS用户和组,符合要求
选项F,保证全套软件栈都运行于mysql server服务器上,错误
因此,选项BCE正确。
讲解:
mysql8安装有多种方式,如下:
- yum源网络安装
- rpm包本地安装
- 预编译二进制安装
- 源码编译安装
其中预编译二进制和源码编译安装都需要在启动mysqld服务器前手工执行initialize初始化数据库
yum源和rpm包安装则不需要执行initialize。
initialize会做以下动作:
- 创建ibdata、ibtmp、ib_logfile、undo等系统表空间
- 创建mysql系统数据库
- 创建pem加解密的key和证书
- 创建auto.cnf文件
- 创建mysql的root用户的初始密码
root的初始化密码可以在log-error指定的文件中找到(--initialize方式),或者在终端输出内容中看到(--initialize --console方式)
因此,选项BC正确。
讲解:
linux平台关闭mysqld服务有如下几种方式:
- systemctl stop mysqld
- mysqldadmin shutdown
- mysql>shutdown
看选项:
选项A,mysqld_safe没有shutdown的功能
选项B,kill mysqld_safe ,kill后面要接PID,这个写法都是错误的
选项D,mysql 客户端确实可以直接发送shutdown指定,但这个写法错了,应该是
mysql -S /tmp/mysql.sock -e shutdown
选项E,与选项A错误系统
因此,选项CFG正确。
讲解:
mysql_config_editor是什么呢
mysql_config_editor是一个可以用来配置mysql登录信息的工具,它可以分组管理不同的登录信息,这些登录信息被记录在用户的home目录下的一个叫做.mylogin.cnf的文件中,内容以二进制存储,并且密码是加密存储,无法看到明文。
mysql_config_editor只提供有限几个跟登录信息有关的参数供用户使用:
- host
- user
- password
- port
- socket
如何使用mysql_config_editor进行信息配置呢
配置方式举例如下,配置两个登录信息分组,分别为local和remote:
shell>mysql_config_editor set --login-path local --host=localhost --user=test --password
shell>mysql_config_editor set --login-path remote--host=192.168.11.210 --user=test --password
此时可以看到.mylogin.cnf已经生成:
shell> ll ~/.mylong.cnf
如何查看它创建的内容呢:
shell> mysql_config_editor print --all
[local]
user = "root"
password = *****
host = "localhost"
[remote]
user = "root"
password = *****
host = "192.168.11.210"
如何使用这些登录信息呢
- 如果要登录本地mysql服务,可以如下方式:
shell> mysql --login-path=local
- 如果要登录远程mysql服务,可以如下方式:
shell>mysql --login-path=remote
- 如果配置了[client]组,那么mysql命令在不指定--login-path的情况下将默认使用client这个组信息,以下两个命令等价:
shell>mysql
shell>mysql --login-path=client
除了用于mysql客户端登录,还能用于什么地方呢?
- mysqlbackup --login-path
- mysqlbinlog --login-path
- mysqladmin --login-path
这样做有什么好处呢?
- 安全
- 便捷
看选项:
选项A,它能改变my.cnf配置文件的内容。不,它只管理.mylogin.cnf。
选项B,它管理的是mysql客户端程序的配置。
选项C,它可以移动datadir。太荒谬了。
选项D,它能管理访问server的用户的权限。不可能,它没那么大能量。
选项E,它将默认使用[client]登录信息组,如果mysql不指定--login-path。
选项F,它管理mysql firewall。没这个本事。
选项G,它可用来创建甚至修改SSL认证和日志的位置。做不到。
因此,选项BE正确。
讲解:
看题目:
题目中日志信息描述mysqld服务在启动时报错找不到ibdata1文件,错误码-MY-012646。
这种问题一般是真的找不到ibdata1文件,或者文件目录权限不对。
看选项:
选项A,检查datadir配置正确与否。
选项E,检查缺少的ibdata1是否在其它目录。
因此,选项AE正确。
讲解:
看题目:
题目显示了间隔100S的前后两次SHOW GLOBAL STATUS的输出信息的片段。
片段一和片段二比较可以发现以下信息:
- opened_tables前后差值太大,100S增长了3500个。
- opened_files前后差值太大,100S增长了2505个.
说明在短短100S时间内,打开了3500个次table,这说明table_open_cache已经用完,并且严重不足。
题目又给出了一个信息,并发数正常情况下只有50-75.
从status前后状态看,thread_running分别是58和64;threads_connected分别是62和67。这表明,连接数设定是足够用的。
看选项:
选项A,降低table_definition_cache。这个值前后并没有太大变化,说明没有新的表要打开,都是固定的表再被重复打开关闭。因此不需要降低它的值。
选项B,降低open_files_limit。恰恰相反,从前后差值2505看,应该增大这个值的设定才可以。
选项C,增大table_open_cache。正确。这个值设置太低导致缓存的表太少,从而不断打开与关闭表,造成opened_tables值前后增大的3500个。
选项D,增大max_connections。这个完全没必要了,足够用。
因此,选项C正确。
讲解:
启动多个mysqld实例,方式有很多:
- mysqld_multi
- docker
- 安装多个实例后给每个mysqld指定单独的my.cnf配置文件
- 配置多个systemd 服务,每个服务都有不同的配置
看选项:
选项AB,都说给不同实例绑定不同的CPU,这完全是运行资源管理,不是部署多个mysql实例方式。
选项C,mysqld运行指定不同的--datadir。是的,这个是必须的,但不是完全的,还需要其它参数才可以,比如--port。
因此,选项DEF正确。
讲解:
在mysql中,可以指定2个参数来控制innodb tablespace数据数据文件的位置:
- datadir,这是数据文件的默认存放根目录,系统和用户创建的数据文件都在这个datadir目录下
- innodb_ data_home_dir,这是数据文件home目录,默认值是./,也就是datadir;但若给它指定了其它目录,用户创建的数据表空间将被定位到指定的值对应的目录,比如题目中就设置为/innodb_data
看题目:
题目要求添加一个innodb_directories='/innodb_extras'的参数,这个参数的作用是指定另外一个附加目录,mysql服务在启动的时候,innodb引擎会扫描这个目录下的数据文件并加载。
看选项:
只有E准确地表达了innodb_directories的作用。
第三讲中篇结束。
作者:老哥讲数据库
简介:数据库高级架构师 | Oracle 11g&12c OCM | MySQL 5.7&8.0 OCP
原创文章,转载请注明来源。