请稍等...

小波Note

四川 · 成都市多云16 ℃
中文

CentOS 安装 Mysql 5.7

成都 (cheng du)2024/9/15 22:32:024.82k预计阅读时间 16 分钟收藏Ctrl + D / ⌘ + D
cover
IT FB(up 主)
后端开发工程师
文章摘要
Github Copilot

文章摘要加载中...

下载 Mysql 5.7

MySQL
5.7
下载
bash
        cd /usr/local/src
wget xxx

    

卸载系统自带的 Mariadb

bash
        # 查看是否有 mariadb
rpm -qa|grep mariadb

# 删除 mariadb
rpm -e --nodeps xxx

    

rpm mariad

解压 Mysql,移动到 /usr/local/mysql 目录

bash
        tar -zxvf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz

    

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

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

mysql dir

创建 mysql 用户组和用户

bash
        groupadd mysql
useradd -g mysql mysql

    

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

bash
        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 特定于用户的登录路径选项(仅限客户端)
my.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

    

初始化数据库

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

    

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

bash
        # 将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

    

chkconfig

配置全局访问

bash
        # 方式一(推荐)
# 在 /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服务

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

    

查看临时密码

在 mysql-error.log 文件中查看

mysql-error.log

修改密码

需要先修改密码才可以进行其他操作,否则会报 You must reset your password using ALTER USER statement before executing this statement.

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

    

alter pwd

远程访问

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

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

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

    

远程登陆

bash
        # 这种方式不会更改权限
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;

    

数据库备份

bash
        mysqldump -uroot -pxxx 在脚本中输入密码 mysql 会提醒不安全
如果在 my.cnf [mysqldump] 中配置了 
user=root
password=xxx
就可以省略输入密码
-a -m -c  对应 access modify  change
+/-  + 某个数字后 - 某个数字内
-mmin +/- 分钟
-mtime +/-例如:-mmin +1 一分钟后

    
mysql_backup.sh
        #!/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

    

定时备份

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

# 查看定时
crontab -l

    

backup

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

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