1、说明和注意事项【必读】
- 本文数据库安装方式为源码编译安装。
- 安装的数据库包版本为:mysql-8.2.0-linux-glibc2.17-x86_64.tar.xz。该安装包针对于x86_64位架构。不同的架构需要下载不同架构的安装包。(uname -m 可以查看服务器架构)
- 服务器为linux,x86_64架构。
- 安装前对于服务器的性能调优在此不进行配置。
- 安装前请搭建好yum源,方便yum安装相应依赖。
- 本文中数据库(实例mysql和数据data)的安装都在数据盘下面。(生产环境中建议不要将数据库安装在系统盘下面)
- mysql安装包的获取地址:https://downloads.mysql.com/archives/community/
- 安装mysql的时候尽量使用管理用户root操作。
2、安装前准备
2.0 获取和本文中一致的mysql安装包。
访问此地址:https://downloads.mysql.com/archives/community/
2.1 创建mysql相关目录。下面的app为实例位置,data为数据位置,logs为日志位置,bak为备份位置。
# 创建MySQL相关目录
mkdir /data/mysql
mkdir /data/mysql/app
mkdir /data/mysql/data
mkdir /data/mysql/logs
mkdir /data/mysql/bak
# 创建MySQL的日志相关目录.
# err_log存错误日志,bin_log存二进制日志,slow_log存慢查询日志。
mkdir /data/mysql/logs/err_log
mkdir /data/mysql/logs/bin_log
mkdir /data/mysql/logs/slow_log
2.2 上传安装包以及依赖解决
# 1. 进入到mysql的app目录下面
cd /data/mysql/app
# 2. 此处敲回车选择安装包,或者通过ftp上传也一样。
rz
# 3. 解压安装包到当前目录下。
# 注意:.tar.xz格式的包,在解压的时候不要加-z参数。-z参数针对于.tar.gz格式的包
tar -xvf mysql-8.2.0-linux-glibc2.17-x86_64.tar.xz
# 4. 添加软连接或者重命名
ln -fs mysql-8.2.0-linux-glibc2.17-x86_64 mysql
mv mysql-8.2.0-linux-glibc2.17-x86_64 mysql # 建议直接使用mv改名
# 5. 将原有的mysql安装包移动到bak目录下面
mv mysql-8.2.0-linux-glibc2.17-x86_64.tar.xz ./../bak/
##########解决mysql依赖########################
# 6. 查看是否安装mysql依赖libaio。下面命令如果有返回libaio开头的包说明已安装
rpm -qa | grep libaio
# 7. 如果没有安装,就开始安装。安装结束后指向6中的命令查看。
yum install -y libaio
2.3 删除服务器中自带的mariadb和my.cnf文件
# 1. 查看mariadb和mysql是否已安装
rpm -qa | grep mariadb
rpm -qa | grep mysql
# 2. 如果上面命令有返回结果,说明mariadb或mysql存在,需要卸载
# ***表示包名字, 如果第一个命令卸载不了,使用第二个,或者根据提示按顺序删除。
rpm -evh ***
rpm -evh *** --nodeps
# 3.删除或改名服务器自带的my.cnf文件。执行其中1条就行。不执行可能导致mysql启动失败
rm -rf /etc/my.cnf
mv /etc/my.cnf /etc/my.cnf.bak
2.4 配置环境变量
# 1. 先进入mysql的bin目录下,复制路径
cd /data/mysql/app/mysql/bin
pwd
# 2. 编辑环境变量,修改PATH部分。
vim ~/.bash_profile
PATH=$PATH:/mysql/app/mysql/bin:$HOME/bin
# 3. 重载环境变量文件
source ~/.bash_profile
# 4. 验证mysql是否已经添加到环境变量中
mysql --version
which mysql
3、开始安装
3.1 创建mysql用户和组
# 1. 先创建mysql组,然后在创建用户mysql并指定组也为mysql
groupadd mysql
useradd -r mysql -g mysql
# 2. 查看
id mysql
# 3. 修改权限,修改/data/mysql的用户和组为mysql
chown -R mysql:mysql /data/mysql
3.2 创建my.cnf配置文件
cd /data/mysql/
rz my.cnf
# my.cnf内容如下[client]为开头,该文件生产中适用。可适当调整,也可不调整:
[client]
port=3308
socket = /data/mysql/mysql.sock
[mysql]
no-beep
#no-auto-rehash
auto-rehash
default-character-set=utf8mb4
[mysqld]
########basic settings start########
skip_name_resolve
#sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql_mode = STRICT_TRANS_TABLES,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
autocommit = 1
lower-case-table-names=1
character-set-server=utf8mb4
port=3308
pid-file=/data/mysql/mysql.pid
socket=/data/mysql/mysql.sock
basedir=/data/mysql/app/mysql
datadir=/data/mysql/data
default-storage-engine=INNODB
innodb_buffer_pool_size = 22G
max_connect_errors = 2000
max_connections = 4000
wait_timeout = 3600
interactive_timeout = 3600
net_read_timeout = 3600
net_write_timeout = 3600
table_open_cache = 1024
table_definition_cache = 1024
thread_cache_size = 512
open_files_limit = 10000
join_buffer_size = 128M
########basic settings end########
########log settings start########
##慢查询日志
slow_query_log = ON
long_query_time = 10
slow_query_log_file = /data/mysql/logs/slow_log/slow.log
##错误日志
log-error=/data/mysql/logs/err_log/error.log
#二进制日志
server-id=75
# mysql8的过期天数参数和5.7不一样。2592000=30天,8默认单位是秒
binlog_expire_logs_seconds = 2592000
binlog_format=row
log_bin=/data/mysql/logs/bin_log/binlog
log_bin_index=/data/mysql/logs/bin_log/binlog.index
########log settings end########
########innodb settings########
innodb_strict_mode=0
innodb_io_capacity = 500
innodb_io_capacity_max = 800
innodb_flush_sync = 0
innodb_flush_neighbors = 0
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_open_files = 65535
innodb_max_dirty_pages_pct = 50
innodb_lru_scan_depth = 4000
innodb_checksum_algorithm = crc32
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_file_per_table = 1
innodb_online_alter_log_max_size = 4G
innodb_stats_on_metadata = 0
####other settings########
max_allowed_packet =300M
#过滤因mysql8版本采用的密码算法不同记录的告警日志
log_error_suppression_list=MY-013360
log_timestamps = system
#使用旧的密码算法
default_authentication_plugin=mysql_native_password
#default_authentication_plugin=caching_sha2_password
3.3 开始初始化安装
cd /data/mysql
# 1. 再次修改权限。在3.2中我们用管理用户root创建了my.cnf文件。该文件的用户和组还是root
chown -R mysql:mysql /data/mysql
# 2. 初始化mysql,此处执行需要等待几秒。
mysqld --defaults-file=/data/mysql/my.cnf --initialize --user=mysql --basedir=/data/mysql/app/mysql --datadir=/data/mysql/data
# 3. 查看错误日志文件,获取临时mysql密码,临时密码在后面登录会用到。
cat /data/mysql/logs/err_log/error.log
3.4 配置service方式启动
3.4.1 先修改mysql.server文件
# 1. 进入到support-files目录下面
cd /data/mysql/app/mysql/support-files
# 2. 备份并改名
cp mysql.server mysqld
# 3. 修改mysqld文件,
# 注意:下面内容中前面的数字不是内容中的部分,只是为了说明需要修改的内容在哪一行。
46 basedir=/data/mysql/app/mysql
47 datadir=/data/mysql
63 mysqld_pid_file_path=/data/mysql/mysql.pid
66 basedir=/data/mysql/app/mysql
67 bindir=/data/mysql/app/mysql/bin
70 datadir=/data/mysql/data
72 sbindir=/data/mysql/bin
73 libexecdir=/data/mysql/app/mysql/bin
105 PATH="/sbin:/usr/sbin:/bin:/usr/bin:/data/mysql/app/mysql/bin:$basedir/bin"
207 conf=/data/mysql/my.cnf
266 $bindir/mysqld_safe --defaults-file=/data/mysql/my.cnf --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
3.4.2 添加service方式启动,设置开机启动
# 1. 将mysqld文件复制到/etc/init.d下面
cd /data/mysql/app/mysql/support-files
cp mysqld /etc/init.d
ls
# 添加到启动中
chkconfig --add mysqld
chkconfig --list
3.5、启动mysql服务并配置新密码
cd /data/mysql
# 1. 启动mysql服务
service mysqld start
# 2. 查看进程和端口,确保mysql服务已经启动.3308为my.cnf中定义的mysql端口
ps -ef | grep mysqld
netstat -tunlp | grep 3308
# 3. 添加软连接。添加前查看服务启动后/data/mysql下面是否生成mysql.sock文件
# 服务启动后会在我们定义的/data/mysql/目录下面生成.pid文件、.sock文件和.sock.lock文件,见下图。
ll /data/mysql
ln -fs /data/mysql/mysql.sock /tmp
# 3. 登录mysql。执行下面命令后直接回车,然后输入前面记录的临时密码后回车。
# 输入临时密码终终端是没有任何显示的,属于正常情况。不必在意。
mysql -u root -p
# ----------sql部分-----------
# 下面是登录mysql后的sql部分。执行mysql> 后面的语句即可
# 4. 修改当前root用户的密码,密码为sxl_yyds, 密码可修改。
mysql> alter user 'root'@'localhost' identified by 'sxl_yyds';
Query OK, 0 rows affected (0.01 sec)
# 5. 刷新
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
# 6. 退出
mysql> quit
# 7. 重新登录MySQL,这次使用新密码登录
mysql -u root -p
# -------------------sql部分----------------
# 下面是登录mysql后的sql部分。执行mysql> 后面的语句即可
# 进入mysql库
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
# 设置root用户的密码永不过期(根据自己情况执行)
Database changed
mysql> update user set password_expired = 'N' where user = 'root';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
# 创建新用户授予权限。后续工具连接测试使用新用户。root用户我们只允许本地ip登录。
# 创建用户sxl,所有ip可登录,密码为sxl@135。前面的%代表所有ip
mysql> create user 'sxl'@'%' identified by 'sxl@135';
Query OK, 0 rows affected (0.00 sec)
# 授予所有权限
mysql> grant all privileges on *.* to 'sxl'@'%' with grant option;
Query OK, 0 rows affected (0.00 sec)
# 刷新
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
# 查看用户表
mysql> select host,user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | sxl |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
5 rows in set (0.00 sec)
mysql> quit
# 新用户登录验证。
mysql -u sxl -p
mysql服务启动后,会在我们定义的/data/mysql目录下面生成pid文件和sock文件。如下图所示。
4、防火墙配置
# 1. 查看你防火墙状态
systemctl status firewalld
# 2. 如果防火墙开启,开放mysql的3308端口(如果防火墙未开启,忽略此步骤)
# 添加tcp的3308端口,下面的permanent为重启生效,不加为当前生效。两条命令都执行
firewall-cmd --add-port=3308/tcp
firewall-cmd --add-port=3308/tcp --permanent
# 刷新
firewall-cmd --reload
# 查看防火墙列表,此时端口已经在列表中存在。
firewall-cmd --list-all
5、工具连接验证(结尾)
敬语:此文章如有问题望多多指正,在此感激不尽。