下载 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
解压 Mysql,移动到 /usr/local/mysql 目录
bash
tar -zxvf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz
创建用于存储 Mysql 数据的目录
这里是放在 根目录 下的 然后在里面建一个 data 和 log 目录
创建 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
配置全局访问
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 文件中查看
修改密码
需要先修改密码才可以进行其他操作,否则会报
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;
远程访问
云服务器还需要在安全组的入站规则中配置
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
如果忘记了配置 bin-log 的过期时间,可以用下面命令删除超过 7 天的 log
bash
PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY);