麦克斯仇
Think different
159
文章
27969
阅读
首页
INDEX
文章
ARTICLE
关于
ABOUT
CentOS7 / Debian12 安装 MySQL 8.4.x LTS
创建日期:
2019/02/15
修改日期:
2024/07/24
Linux
MySQL
> 注:以下命令使用 `root` 用户执行 # 下载 - 最新版:[https://dev.mysql.com/downloads/mysql/](https://dev.mysql.com/downloads/mysql/) - 旧版本:[https://downloads.mysql.com/archives/community/](https://downloads.mysql.com/archives/community/) 注:`MySQL 5.7` 已停止维护,下文以 `MySQL 8.4.2 LTS` 为例 1. 打开最新版链接 2. 在 `Select Version` 选择 `8.4.2 LTS` 3. 在 `Select Operating System` 选择`Linux - Generic` 4. 在 `Select OS Version` 前,需要先确定当前系统的 `glibc` 版本,使用 `ldd --version` 命令即可查看<br>一般情况下,`CentOS7` 的 `glibc` 版本为 `2.17` ,不能运行 `glibc2.28` 版本的 `MySQL` 5. 在 `Select OS Version` - `x86` 处理器选择 `Linux - Generic (glibc 2.17) (x86, 64-bit)` - `ARM` 处理器则选择 `Linux - Generic (glibc 2.17) (ARM, 64-bit)` 6. 点击 **Compressed TAR Archive** 后面的 `download` 按钮 7. 不需要登录,直接点击 `No thanks, just start my download` 下载安装包 8. 下载完成后,使用ftp工具上传工具将安装包上传到 `/root` 目录下 # 检查系统 ## 检查是否存在 `mariadb` 数据库 注:该数据库会与 `MySQL` 冲突,一般情况下仅 `CentOS7` 需要执行 查看是否安装了 `mariadb` ```bash rpm -qa | grep mariadb ``` 如果显示了以下信息就代表有 ``` mariadb-libs-XXXXX ``` 先停止服务,**一般情况下服务是没启动的状态**,出现服务停止失败的提示是正常的 ```bash systemctl stop mariadb ``` 然后执行以下命令卸载 ```bash rpm -e --nodeps mariadb-libs ``` 如果显示的信息里还包含其他的 `mariadb` 相关包,也需要卸载 ## 安装依赖 ```bash # CentOS7 yum -y install libaio # Debian12 apt-get install xz-utils libaio1 libnuma1 libncurses5 ``` # 安装 ## 解压、删除压缩包、移动并重命名 ```bash tar -xf mysql-8.4.2-linux-glibc2.17-x86_64.tar.xz rm -rf mysql-8.4.2-linux-glibc2.17-x86_64.tar.xz mv mysql-8.4.2-linux-glibc2.17-x86_64/ /usr/local/mysql ``` 注:建议移动到 `/usr/local` 目录下,并重命名为 `mysql` ## 新建日志文件夹 在 `mysql` 目录下新建一个 `log` 文件夹,用于存储日志文件 ```bash mkdir /usr/local/mysql/log ``` ## 新建 my.cnf 配置文件 在 `/usr/local/mysql/` 路径下,新建一个配置文件 ```bash vim /usr/local/mysql/my.cnf ``` 粘贴以下内容后保存 ```ini [mysql] # 客户端默认字符集 default-character-set=utf8mb4 [mysqld] # === 基础配置 === # 绑定ipv4地址,默认*绑定ipv4与ipv6 bind-address=0.0.0.0 # 端口号 port=3306 # 服务端使用的字符集 character-set-server=utf8mb4 # 数据库排序字符集 collation_server=utf8mb4_general_ci # 服务器在关闭交互式连接之前等待活动的秒数,默认28800(8小时) interactive_timeout=7200 # 服务器关闭非交互连接之前等待活动的秒数,默认28800(8小时) wait_timeout=3600 # 写入错误日志的消息以及写入文件的常规查询日志和慢速查询日志消息中的时间戳的时区,默认UTC时间,SYSTEM代表取系统时间 log_timestamps=SYSTEM # 最大允许数据包 max_allowed_packet=1073741824 # 关闭MySQLx(一般情况下用不到)MySQL5.7不支持此选项,使用时需要注释此配置 mysqlx=0 # === 基础目录 === # 安装目录 basedir=/usr/local/mysql # 数据库的数据的存放目录 datadir=/usr/local/mysql/data # === 日志相关 === ## >>> 慢查询日志 # 开启慢查询日志,默认OFF,建议开发和测试环境开启 slow_query_log=ON # 慢查询日志文件位置 slow_query_log_file=/usr/local/mysql/log/log-slow.log # 慢查询时间阈值,默认10,单位:秒 long_query_time=1 ## >>> 错误日志 # 错误日志存放文件,默认 datadir 目录下 log_error=/usr/local/mysql/log/log-error.log # 开启事务中所有死锁的InnoDB信息记录在错误日志中 innodb_print_all_deadlocks=ON ## >>> 二进制日志 # 二进制日志文件基础名称以及路径,默认 datadir 目录下 log_bin=/usr/local/mysql/log/log-bin ## >>> 中继日志,主从复制时,从机需要配置 # 中继日志文件位置,默认 datadir 目录下 #relay_log=/usr/local/mysql/log/log-relay ``` 以下为性能相关调优,可选择加入 ```ini # === 性能相关 === # 下文中的数值需要根据CPU核心数量或内存大小计算 # 1:{MIN(DBInitCpu,64)} DBInitCpu代表CPU核心数量,若为8核CPU,则取8和64的较小值为8 # 2:{MIN(DBInitMemory/2000,16)} DBInitMemory代表内存MB大小,若内存大小为16GB,则取16*1000/2000和16的较小值为8 # 用于保存事务期间二进制日志更改的内存缓冲区的大小,单位bytes,默认32768 binlog_cache_size=2097152 # InnoDB 缓冲池划分的区域数,默认8,推荐{MIN(DBInitMemory/2000,16)} innodb_buffer_pool_instances=8 # InnoDB 缓冲池的大小,单位bytes,默认134217728,推荐{DBInitMemory*786432} innodb_buffer_pool_size=12582912000 # 禁用自适应哈希索引 innodb_adaptive_hash_index=OFF # DDL 操作的最大缓冲区大小,单位bytes,默认1048576,推荐10485760 innodb_ddl_buffer_size=10485760 # 索引创建排序和构建阶段的最大并行线程数,默认4,推荐{MIN(DBInitCpu,64)} innodb_ddl_threads=8 # 将数据刷新到InnoDB数据文件和日志文件的方法,默认fsync,推荐O_DIRECT(Windows环境不适用) innodb_flush_method=O_DIRECT # 定义后台任务的每秒 I/O 操作数 (IOPS) ,默认200,推荐20000 innodb_io_capacity=20000 # 定义后台任务的最大每秒 I/O 操作数 (IOPS) ,默认{MAX(innodb_io_capacity*2,2000)},推荐40000 innodb_io_capacity_max=40000 # InnoDB 用于写入磁盘日志文件的缓冲区大小。单位bytes,默认16777216,推荐67108864 innodb_log_buffer_size=67108864 # 定义重做日志文件占用的磁盘空间量,单位bytes,默认104857600,推荐4194304000 innodb_redo_log_capacity=4194304000 # InnoDB 读取操作的 I/O 线程数,默认4,推荐{MAX(DBInitCpu/2,4)} innodb_read_io_threads=4 # InnoDB 写入操作的 I/O 线程数,默认4,推荐{MAX(DBInitCpu/2,4)} innodb_write_io_threads=4 # 用于普通索引扫描、范围索引扫描和不使用索引从而执行全表扫描的连接所使用的缓冲区的最小大小,单位bytes,默认262144,推荐{MIN(DBInitMemory*128,262144)} join_buffer_size=262144 # 允许同时连接的最大客户端数量,默认151,推荐{MIN(DBInitMemory/4+500,100000)} max_connections=4500 # 会话执行排序的缓冲区大小,单位bytes,默认262144 sort_buffer_size=868352 # 缓存中可存储的表定义数量,默认{MIN(400+table_open_cache/2,2000)},推荐{MAX(DBInitMemory*512/1000,2048)} table_definition_cache=8192 # 所有线程打开的表数,默认{MAX((open_files_limit-10-max_connections)/2,4000)},推荐{MAX(DBInitMemory*512/1000,2048)} table_open_cache=8192 # 打开表缓存实例的数量,默认16,推荐{MIN(DBInitMemory/1000,16)} table_open_cache_instances=16 # 服务器应缓存多少个线程以供重复使用,默认{8+(max_connections/100)} thread_cache_size=512 ``` ## 设置环境变量 编辑环境变量配置文件 ```bash vim /etc/profile ``` 在文档最后添加如下内容 ``` export MYSQL_HOME=/usr/local/mysql export PATH=$PATH:$MYSQL_HOME/bin ``` 插入后保存文件 使环境变量生效 ```bash source /etc/profile ``` ## 新建 mysql 用户、 mysql 用户组,修改文件夹所属用户 新建 `mysql` 用户(同时会自动创建同名的 `mysql` 用户组) ```bash groupadd mysql useradd -r -g mysql -s /bin/false mysql ``` 将 `/usr/local/mysql` 的所有者及所属组改为 `mysql` ```bash chown -R mysql:mysql /usr/local/mysql/ ``` ## 初始化MySQL数据库 输入以下命令初始化 `MySQL` 默认数据库,用户名为 `root` ,密码为空 ```bash mysqld --initialize-insecure --user=mysql ``` # 添加服务 编辑服务配置文件 ```bash vim /usr/lib/systemd/system/mysql.service ``` 添加如下内容 ``` [Unit] Description=MySQL Server After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql LimitNOFILE=65535 ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my.cnf ``` 刷新系统服务、设置开机自启、启动服务、查看服务状态 ```bash systemctl daemon-reload systemctl enable mysql.service systemctl start mysql.service systemctl status mysql.service ``` # 修改 MySQL 默认密码以及访问权限 1. 输入 `mysql -u root --skip-password` 命令登录 `MySQL` 3. 输入 `ALTER USER 'root'@'localhost' IDENTIFIED BY "123";` 命令(123即密码,可自定义)修改密码 4. 推荐:输入以下命令使 `root` 用户可以任意 `IP` 地址访问 1. 输入 `use mysql;` 切换到 `mysql` 库 2. 输入 `update user set host = '%' where user = 'root';` 设置访问权限 5. 输入 `flush privileges;` 命令刷新权限 6. 输入 `exit` 退出
212
全部评论