返回

CentOS 安装 MySQL 5.7

软件小窝
2024-02-16 23:22:329.35k 字预计阅读时长 18 分钟

安装包在本篇文章的最后

 

卸载系统自带的 Mariadb

// 查看是否有 mariadb
rpm -qa|grep mariadb
// 删除 mariadb
rpm -e --nodeps xxx

 

解压 Mysql,移动到 /usr/local/mysql 下

// 解压mysql
tar -zxvf xxx

 

创建用于存储 Mysql 数据的目录

我是放在 根目录 下的,然后在里面建一个 data 和 log 目录

 

创建 mysql 用户组和用户

groupadd mysql
useradd -g mysql mysql

 

修改 mysql 目录所属用户组和用户

chown -R mysql /usr/local/mysql/
chgrp -R mysql /usr/local/mysql/

 

在 /etc/my.cnf 配置 my.cnf

 需要注意的是,mysql 5.7.18 开始,tar.gz 包不自带 mysql-default.cnf 文件了,所以 my.cnf 需要自己创建

以下是 mysql 可以自动识别 my.cnf 的默认位置

/etc/my.cnf

全局选项

/etc/mysql/my.cnf

全局选项

SYSCONFDIR/my.cnf

全局选项

$MYSQL_HOME/my.cnf

特定于服务器的选项(仅限服务器)

defaults-extra-file

使用 --defaults-extra-file

指定的文件, 如果有的话

~/.my.cnf

用户特定选项

~/.mylogin.cnf

特定于用户的登录路径选项(仅限客户端)

 

[client]
# 端口
port=3306

# socket文件
socket=/mysql/mysql.sock

[mysql]
default-character-set=utf8mb4

[mysqld]
# 编号
server-id=1

# 端口
port=3306

# 字符集
character-set-server=utf8mb4

# 数据库安装目录
basedir=/usr/local/mysql

# 数据库数据存放目录
datadir=/mysql/data

# 临时目录
tmpdir=/tmp

# socket文件
socket=/mysql/mysql.sock

# 二进制日志文件
log-bin=/mysql/log/mysql-bin

# 二进制日志格式
binlog_format=ROW

# 日志过期时间,0 不过期
expire_logs_days=7

# 二进制日志数据库
#binlog-do-db=dbname

# 二进制日志忽略数据库
#binlog-ignore-db=dbname

# 开启慢查询
slow_query_log=1

# 慢查询日志文件
slow_query_log_file=/mysql/log/mysql-slow.log

# 慢查询超过5秒的记录
long_query_time=5

# timestamp列中的默认值和NULL值
explicit_defaults_for_timestamp=1

# 日志文件
log-error=/mysql/log/mysql-error.log

# pid文件
pid-file=/mysql/mysql.pid

# sql_mode
#sql_mode=""

[mysqldump]
quick

 

初始化数据库

./bin/mysqld --initialize --user=mysql

 

添加 mysql 系统服务,开机自启

 

# 将MySQL的服务脚本放到系统服务中
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

# 授予可执行权限
chmod +x /etc/init.d/mysql

# 添加mysql服务
chkconfig --add mysql

# 使 mysql 开机自启
chkconfig --level 345 mysql on

# 查看服务列表
chkconfig --list

 

配置全局访问

 

# 方式一(推荐)
# 在 /etc/profile 中配置环境变量
vim /etc/profile

export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin:$MYSQL_HOME/lib

source /etc/profile

# 方式二
# 创建软连接
ln -s /usr/local/mysql/bin/mysql /usr/bin

 

启动和关闭 MySQL服务

service mysql start
service mysql stop
service mysql restart
service mysql status

 

查看临时密码

在 mysql-error.log 文件中查看

 

修改密码

需要先修改密码才可以进行其他操作,否则会报

You must reset your password using ALTER USER statement before executing this statement.

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
flush privileges;

 

 

远程访问

云服务器还需要在安全组的入站规则中配置

# 开放端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

# 查看已开放的端口
firewall-cmd --zone=public --list-ports

 

远程登陆

# 这种方式不会更改权限
update mysql.user set host='%' where user='root' and host='localhost';
# 或者
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'test' WITH GRANT OPTION;

flush privileges;

 

数据库备份

mysqldump -uroot -pxxx 在脚本中输入密码 mysql 会提醒不安全
如果在 my.cnf 的 [mysqldump] 中配置了
user=root
password=xxx
就可以省略输入密码


-a -m -c  对应 access modify  change
+/-  + 某个数字后 - 某个数字内
-mmin +/- 分钟
-mtime +/- 天
例如:-mmin +1 一分钟后

 

#!/bin/bash

dir=/backup/mysql

# 备份数据库
db_name=test

# 备份时间
time=$(date +'%Y-%m-%d_%H:%M:%S')

# 文件名
file_name=mysql

mysqldump $backup_name --databases $db_name | gzip > $dir/$file_name'_'$db_name'_'$time.sql.gz

find $dir -name $file_name'_'$db_name'_*.sql.gz' -type f -mmin +1 -exec rm -rf {} \; >/dev/null

 

定时备份

# 编写定时
crontab -e
*/1 * * * * sh /sh/mysql_backup.sh

# 查看定时
crontab -l

 

如果忘记了配置 bin-log 的过期时间,可以用下面命令删除超过 7 天的 log

PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY);

 

本篇文章用到的软件

  • 5.7.39MySQL
    MySQL
    广受欢迎的开源数据库
    下载