第425集数据库安装管理 | 字数总计: 4.8k | 阅读时长: 21分钟 | 阅读量:
数据库安装管理 1. YUM安装数据库 MySQL Yum仓库提供了用于在Linux平台上安装MySQL服务器、客户端和其他组件的RPM包。
MySQL Yum安装下载地址 : https://dev.mysql.com/downloads/repo/yum/
使用MySQL Yum仓库时,默认选择安装最新的MySQL版本。如果需要使用低版本请按如下操作。
1.1 安装MySQL仓库源 1 2 3 4 5 [root@sql ~] [root@sql ~]
1.2 选择并启用适合当前平台的发行包 查看所有MySQL发行版仓库
输出示例 :
1 2 3 4 5 mysql-connectors-community/x86_64 MySQL Connectors Community enabled: 51 mysql-tools-community/x86_64 MySQL Tools Community enabled: 63 mysql80-community/x86_64 MySQL 8.0 Community Server enabled: 161 mysql57-community/x86_64 MySQL 5.7 Community Server disabled mysql56-community/x86_64 MySQL 5.6 Community Server disabled
禁用8.0发行版仓库,启用5.7发行版仓库 1 2 3 4 5 6 7 8 9 10 11 [root@sql ~] [root@sql ~] [root@sql ~] [root@sql ~]
手动编辑仓库配置文件 可以手动编辑/etc/yum.repos.d/mysql-community.repo文件配置仓库:
配置示例 :
1 2 3 4 5 6 7 8 9 10 11 12 13 [mysql57-community] name =MySQL 5.7 Community Serverbaseurl =http://repo.mysql.com/yum/mysql-5.7 -community/el/7 /$basearch /enabled =1 gpgcheck =1 gpgkey =file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql[mysql80-community] name =MySQL 8.0 Community Serverbaseurl =http://repo.mysql.com/yum/mysql-8.0 -community/el/7 /$basearch /enabled =0 gpgcheck =1 gpgkey =file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
配置说明 :
enabled=1: 启用该仓库
enabled=0: 禁用该仓库
gpgcheck=1: 启用GPG检查
1.3 安装MySQL并启动 1 2 3 4 5 6 7 8 9 10 11 [root@sql ~] [root@sql ~] [root@sql ~] [root@sql ~]
1.4 MySQL服务器初始化 MySQL服务器初始化(仅适用于MySQL 5.7) : 在服务器初始启动时,如果服务器的数据目录为空,则会发生以下情况:
服务器已初始化
在数据目录中生成SSL证书和密钥文件
validate_password插件安装并启用
超级用户帐户'root'@'localhost'已创建
超级用户的密码被设置并存储在错误日志文件中。要显示它,请使用以下命令:
1 2 3 [root@vm-70-160 ~] 2018-04-28T07:11:51.589629Z 1 [Note] A temporary password is generated for root@localhost: jHlRHucap3+7
或者使用更精确的命令 :
1 2 3 4 5 6 7 [root@vm-70-160 ~] 2018-04-28T07:11:51.589629Z 1 [Note] A temporary password is generated for root@localhost: jHlRHucap3+7 [root@vm-70-160 ~] jHlRHucap3+7
1.5 修改root密码 通过使用生成的临时密码登录并尽快更改root密码,为超级用户帐户设置自定义密码。
1 2 3 4 5 6 7 8 9 [root@vm-70-160 ~] mysql> ALTER USER 'root' @'localhost' IDENTIFIED BY 'Bgx123.com' ; Query OK, 0 rows affected (0.01 sec) mysql> exit
注意 : MySQL的validate_password插件默认安装。将要求密码至少包含:
大写字母
小写字母
数字
特殊字符
总密码长度至少为8个字符
1.6 验证安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root@vm-70-160 ~] mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) mysql> SELECT VERSION(); +-----------+ | VERSION() | +-----------+ | 5.7.22 | +-----------+ 1 row in set (0.00 sec)
2. 通用安装数据库(二进制安装) 采用二进制免编译方式安装MySQL,不需要复杂的编译设置和编译时间等待,解压下载的软件包,初始化即可完成MySQL的安装和启动。
MySQL二进制包下载地址 : https://dev.mysql.com/downloads/mysql/
MySQL二进制包官方安装手册 : https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html
2.1 基础环境准备 1 2 3 4 5 6 7 8 9 10 11 12 13 [root@sql ~] [root@sql ~] [root@sql ~] [root@sql ~] [root@sql ~] [root@sql ~]
用户说明 :
-r: 创建系统用户
-g mysql: 指定用户组
-s /sbin/nologin: 禁止登录shell
2.2 下载MySQL并安装 1 2 3 4 5 6 7 8 9 10 11 [root@sql src] [root@sql src] [root@sql src] [root@sql ~]
2.3 进行MySQL初始化 创建初始化目录以及数据库数据目录 1 2 3 4 5 [root@sql ~] [root@sql ~]
初始化数据库 1 2 3 4 5 [root@sql ~] --user=mysql \ --basedir=/soft/mysql \ --datadir=/soft/mysql/data
初始化输出示例 :
1 2 3 4 2018-04-28T02:30:33.954980Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2018-04-28T02:30:33.954980Z 0 [Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled 2018-04-28T02:30:33.954980Z 0 [Note] mysqld (mysqld 5.7.22) starting as process 12345 ... 2018-04-28T02:30:33.954980Z 1 [Note] A temporary password is generated for 'root'@'localhost': I,isfqnx.0tO
重要 : 初始化数据库会告诉默认登录账户与密码,请务必记录临时密码。
使用SSL连接(可选) 1 2 3 4 5 6 [root@sql ~] --datadir=/soft/mysql/data/ [root@sql ~]
2.4 建立MySQL配置文件 1 2 3 4 5 [root@sql ~] [root@sql ~]
基本配置示例 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [mysqld] basedir =/soft/mysqldatadir =/soft/mysql/dataport =3306 character-set-server =utf8mb4collation-server =utf8mb4_unicode_cilog-error =/soft/mysql/logs/error.logpid-file =/soft/mysql/data/mysql.pidsocket =/tmp/mysql.sock[mysql] default-character-set =utf8mb4[client] default-character-set =utf8mb4socket =/tmp/mysql.sock
2.5 启动MySQL数据库 方式1: 使用mysqld_safe(不推荐生产环境) 1 2 3 4 5 [root@sql ~] [root@sql ~]
方式2: 使用systemd方式管理(强烈推荐) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@sql ~] [root@sql ~] [root@sql ~] [root@sql ~] [root@sql ~] [root@sql ~]
或者手动编辑启动脚本 :
1 2 3 4 5 6 vim /etc/init.d/mysqld basedir=/soft/mysql datadir=/soft/mysql/data
启动数据库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@sql ~] Starting MySQL. SUCCESS! [root@sql ~] mysql 2659 0.5 25.3 1234567 123456 ? Ssl 10:30 0:01 /soft/mysql/bin/mysqld [root@sql ~] COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 2659 mysql 16u IPv6 28431 0t0 TCP *:mysql (LISTEN) [root@sql ~] tcp LISTEN 0 80 :::3306 :::* users :(("mysqld",pid=2659 ,fd=16 ))
2.6 连接数据库测试 配置环境变量 1 2 3 4 5 6 7 8 9 10 11 12 13 [root@sql ~] -bash: mysql: command not found [root@sql ~] [root@sql ~] [root@sql ~] /soft/mysql/bin/mysql
登录数据库
修改默认密码 1 2 3 4 5 6 7 8 9 10 mysql> show databases; ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. mysql> ALTER USER 'root' @'localhost' IDENTIFIED BY 'bgx' ; Query OK, 0 rows affected (0.01 sec) mysql> exit ;
使用新密码重新登录 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@sql ~] mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.02 sec) mysql> exit ;
2.7 重新初始化(可选) 注意 : 如果需要重新初始化会导致数据全部丢失,请谨慎操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [root@sql ~] [root@sql ~] [root@sql ~] [root@sql ~] --user=mysql \ --basedir=/soft/mysql \ --datadir=/soft/mysql/data [root@sql ~] [root@sql ~]
3. 源码安装数据库 源码编译安装MySQL可以获得最大的灵活性和性能优化,但需要较长的编译时间。
3.1 安装编译依赖 源码安装mysql需要依赖cmake、boost等工具。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root@sql ~] libaio-devel \ gcc \ gcc-c++ \ ncurses \ ncurses-devel \ cmake \ openssl-devel \ bison \ bison-devel [root@sql ~] [root@sql ~]
依赖说明 :
libaio-devel: 异步IO库
gcc/gcc-c++: C/C++编译器
ncurses/ncurses-devel: 终端控制库
cmake: 构建工具
openssl-devel: SSL开发库
bison: 语法分析器
3.2 下载源码包并编译MySQL 1 2 3 4 5 6 7 8 9 [root@sql ~] [root@sql src] [root@sql src] [root@sql src]
配置编译选项 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root@sql mysql-5.7.22] -DCMAKE_INSTALL_PREFIX=/soft/mysql-5.7.22 \ -DMYSQL_UNIX_ADDR=/soft/mysql-5.7.22/data/mysql.sock \ -DMYSQL_DATADIR=/soft/mysql-5.7.22/data \ -DSYSCONFDIR=/soft/mysql-5.7.22/conf \ -DWITH_MYISAM_STORAGE_ENGINE=0 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_MEMORY_STORAGE_ENGINE=0 \ -DWITH_READLINE=1 \ -DMYSQL_TCP_PORT=3306 \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DEXTRA_CHARSETS=all \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_BOOST=/soft/src/mysql-5.7.22/boost/boost_1_59_0
编译选项说明 :
选项
说明
CMAKE_INSTALL_PREFIX
安装路径
MYSQL_UNIX_ADDR
Socket文件路径
MYSQL_DATADIR
数据目录
SYSCONFDIR
配置文件目录
WITH_MYISAM_STORAGE_ENGINE
是否启用MyISAM引擎
WITH_INNOBASE_STORAGE_ENGINE
是否启用InnoDB引擎
WITH_MEMORY_STORAGE_ENGINE
是否启用Memory引擎
MYSQL_TCP_PORT
TCP端口
ENABLED_LOCAL_INFILE
允许LOAD DATA LOCAL INFILE
WITH_PARTITION_STORAGE_ENGINE
是否启用分区引擎
EXTRA_CHARSETS
额外字符集
DEFAULT_CHARSET
默认字符集
DEFAULT_COLLATION
默认排序规则
WITH_BOOST
Boost库路径
编译和安装 1 2 3 4 5 [root@sql mysql-5.7.22] [root@sql mysql-5.7.22]
编译时间 : 根据服务器性能,编译时间可能需要30分钟到2小时。
3.3 完成后基本优化 1 2 3 4 5 6 7 8 [root@sql ~] [root@sql ~] [root@sql ~]
3.4 准备MySQL基础配置文件 1 2 3 4 5 [root@sql ~] [root@sql ~]
配置文件示例 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [mysqld] basedir =/soft/mysqldatadir =/soft/mysql/dataport =3306 character-set-server =utf8mb4collation-server =utf8mb4_unicode_cilog-error =/soft/mysql/data/error.logpid-file =/soft/mysql/data/mysql.pidsocket =/soft/mysql/data/mysql.sock[mysql] default-character-set =utf8mb4[client] default-character-set =utf8mb4socket =/soft/mysql/data/mysql.sock
3.5 拷贝MySQL程序启动文件 1 2 3 4 5 6 7 8 9 10 11 12 13 [root@sql ~] [root@sql ~] [root@sql ~] [root@sql ~] [root@sql ~] [root@sql ~]
3.6 初始化MySQL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@sql ~] --user=mysql \ --basedir=/soft/mysql \ --datadir=/soft/mysql/data [root@sql ~] Starting MySQL. SUCCESS! [root@sql ~] [root@sql ~] [root@sql ~] /soft/mysql/bin/mysql
3.7 连接数据库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@sql ~] mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) mysql> ALTER USER 'root' @'localhost' IDENTIFIED BY 'Bgx123.com' ; Query OK, 0 rows affected (0.00 sec)
4. 变更数据库密码 4.1 更改root密码 方式1: 使用mysqladmin命令(需要知道原密码) 1 2 3 4 5 6 7 [root@sql ~] Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety. [root@sql ~] mysql>
安全提示 : 警告信息提示密码以明文形式发送,建议使用SSL连接。
方式2: 登录MySQL后修改 1 2 3 4 5 6 7 8 9 10 11 12 13 [root@sql ~] mysql> ALTER USER 'root' @'localhost' IDENTIFIED BY 'Bjtest123.com' ; Query OK, 0 rows affected (0.01 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql> exit ;
方式3: 使用UPDATE语句修改(不推荐) 1 2 3 4 5 6 7 8 9 10 11 12 13 [root@sql ~] mysql> UPDATE mysql.user SET authentication_string=PASSWORD('Bjtest123.com' ) WHERE user='root' AND host='localhost' ; Query OK, 1 row affected, 1 warning (0.01 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql> exit ;
注意 : PASSWORD()函数在MySQL 5.7.6+中已废弃,建议使用ALTER USER语句。
4.2 忘记MySQL root密码 如果忘记了MySQL root密码,可以通过跳过授权表的方式重置密码。
步骤1: 修改配置文件
添加跳过授权表配置 :
1 2 [mysqld] skip-grant-tables
步骤2: 重启数据库 1 2 3 4 5 [root@sql ~] [root@sql ~]
步骤3: 无密码登录并查看用户表 1 2 3 4 5 6 7 8 9 10 11 12 13 [root@sql ~] mysql> SELECT user, host, authentication_string FROM mysql.user; +---------------+-----------+-------------------------------------------+ | user | host | authentication_string | +---------------+-----------+-------------------------------------------+ | root | localhost | *C786BB788F276CD53317C80C1957E5F5696751F0 | | mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | +---------------+-----------+-------------------------------------------+ 3 rows in set (0.00 sec)
步骤4: 更新密码 MySQL 5.7.6+版本更新密码方式 :
1 2 3 4 5 6 7 8 9 10 # 更新密码 mysql> UPDATE mysql.user SET authentication_string= PASSWORD('Bgx123.com' ) WHERE user = 'root' AND host= 'localhost' ; Query OK, 1 row affected, 1 warning (0.00 sec) # 刷新权限 mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) # 退出 mysql> exit;
MySQL 5.7.6之前版本更新密码方式 :
1 2 3 4 5 6 7 8 9 10 # 更新密码 mysql> UPDATE mysql.user SET password= PASSWORD('Bgx123.com' ) WHERE user = 'root' AND host= 'localhost' ; Query OK, 1 row affected, 1 warning (0.00 sec) # 刷新权限 mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) # 退出 mysql> exit;
步骤5: 恢复配置文件并重启
步骤6: 使用新密码登录 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@sql ~] mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) mysql> exit ;
4.3 密码管理最佳实践 使用ALTER USER语句(推荐) 1 2 3 4 5 6 7 8 # MySQL 5.7 .6 + 推荐方式 ALTER USER 'root' @'localhost' IDENTIFIED BY 'NewPassword123!' ;# 设置密码过期策略 ALTER USER 'root' @'localhost' PASSWORD EXPIRE INTERVAL 90 DAY ;# 设置密码永不过期 ALTER USER 'root' @'localhost' PASSWORD EXPIRE NEVER;
密码复杂度要求 1 2 3 4 5 6 7 8 9 # 查看密码验证策略 SHOW VARIABLES LIKE 'validate_password%' ;# 设置密码策略 SET GLOBAL validate_password.policy = STRONG;SET GLOBAL validate_password.length = 12 ;SET GLOBAL validate_password.mixed_case_count = 1 ;SET GLOBAL validate_password.number_count = 1 ;SET GLOBAL validate_password.special_char_count = 1 ;
多用户密码管理 1 2 3 4 5 6 # 为不同用户设置不同密码 ALTER USER 'app_user' @'%' IDENTIFIED BY 'AppPassword123!' ;ALTER USER 'readonly_user' @'%' IDENTIFIED BY 'ReadOnlyPass123!' ;# 查看所有用户 SELECT user , host FROM mysql.user;
5. 安装方式对比 5.1 安装方式对比表
安装方式
优点
缺点
适用场景
YUM安装
简单快速、自动依赖、易于管理
版本受限、定制性差
开发测试、快速部署
二进制安装
安装快速、版本可控、无需编译
平台相关、定制性一般
生产环境、标准化部署
源码编译
完全可控、性能优化、功能定制
编译时间长、依赖复杂
特殊需求、性能优化
5.2 选择建议 选择YUM安装 :
快速部署需求
开发测试环境
不需要特殊定制
学习环境
选择二进制安装 :
生产环境部署
需要特定版本
标准化部署
平衡性能和部署时间
选择源码编译 :
需要特定功能
性能优化需求
学习研究
特殊环境要求
6. 安装后配置优化 6.1 基础安全配置 1 2 3 4 5 6 7 8 9 # 删除匿名用户 DELETE FROM mysql.user WHERE user = '' ;# 删除test数据库 DROP DATABASE IF EXISTS test;DELETE FROM mysql.db WHERE Db= 'test' OR Db= 'test\\_%' ;# 刷新权限 FLUSH PRIVILEGES;
6.2 性能优化配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [mysqld] innodb_buffer_pool_size = 2 Gmax_connections = 500 character-set-server = utf8mb4collation-server = utf8mb4_unicode_cislow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.loglong_query_time = 2 log-bin = mysql-binbinlog_format = ROWexpire_logs_days = 7
6.3 服务管理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 systemctl start mysqld /etc/init.d/mysqld start systemctl stop mysqld /etc/init.d/mysqld stop systemctl restart mysqld /etc/init.d/mysqld restart systemctl status mysqld systemctl enable mysqld chkconfig mysqld on
7. 常见问题排查 7.1 安装问题 问题1: 初始化失败
1 2 3 4 5 6 7 8 9 ls -ld /soft/mysql/datachown -R mysql.mysql /soft/mysql/datadf -htail -f /var/log/mysqld.log
问题2: 启动失败
1 2 3 4 5 6 7 8 9 mysqld --validate-config --defaults-file=/etc/my.cnf netstat -tunlp | grep 3306 lsof -i :3306 tail -f /var/log/mysqld.log
7.2 连接问题 问题1: 无法连接
1 2 3 4 5 6 7 8 systemctl status mysqld firewall-cmd --list-all mysql -uroot -p -e "SELECT user, host FROM mysql.user;"
问题2: 密码错误
实战优化