Centos7 Mysql安装与管理

安装 Mysql8

安装 mysql 和 mysql-devel

1
2
yum install mysql
yum install mysql-devel

安装 mysql-server

1
2
3
wget http://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
rpm -ivh mysql80-community-release-el7-5.noarch.rpm
yum install mysql-community-server

安装成功后重启mysql服务

1
service mysqld restart

设置密码

1
2
3
4
5
# 登录mysql并输入密码
mysql -u root -p

# mysql8 修改密码方式
alter user 'root'@'localhost' identified by '这里填你要的密码';

注:
mysql8初次安装后,需要先通过cat /var/log/mysqld.log | grep password 命令查看密码,修改密码时,需要 符合长度,且含有数字、小写或大写字母、特殊字符
无需重启数据库即可生效(且mariadb自动会被替换,不再生效)

进入 /etc/my.cnf 配置编码规则(无需配置的话,可跳过本步骤)
注:这里的字符编码必须和 /usr/share/mysql/charsets/Index.xml 中一致

1
2
[mysql]
default-character-set =utf8

配置远程连接

1
2
3
4
5
6
7
8
配置远程连接授权设置(配置后即可用navicat建立连接),至此完成安装!
# 如果要授权的用户是新用户,而不是root账户,则要先新建用户;如果要授权的是root用户,则跳过此命令
CREATE USER '这里填你要新建的账户'@localhost IDENTIFIED BY '这里填要新建账户的密码';

# 授权,以root账户为例
GRANT ALL PRIVILEGES ON *.* TO 'root'@localhost WITH GRANT OPTION;

FLUSH PRIVILEGES;

安装 MySQL8 以下版本

在 root 目录下,安装 mysql 和 mysql-devel

1
2
yum install mysql
yum install mysql-devel

安装 mysql-server

1
2
3
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install mysql-community-server

安装成功后重启mysql服务

1
2
3
4
5
6
7
8
service mysqld restart

设置密码
# 首次登录,无需输入密码
mysql -u root

# 修改密码
set password for 'root'@'localhost' =password('这里填你修改之后的密码');

注:mysql7初次安装并登陆mysql时,root账户没有密码
无需重启数据库即可生效(且mariadb自动会被替换,不再生效)
进入 /etc/my.cnf 配置编码规则(无需配置的话,可跳过本步骤)
这里的字符编码必须和 /usr/share/mysql/charsets/Index.xml 中一致

1
2
[mysql]
default-character-set =utf8

配置远程连接授权设置(配置后即可用navicat建立连接),至此完成安装!

1
2
3
4
5
# 如果是新用户而不是root,则要先新建用户
create user '这里填你要新建的用户名'@'%' identified by '这里填你要新建用户的密码';

# 把在所有数据库的所有表的所有权限赋值给位于所有IP地址的root用户,以root账户为例
grant all privileges on *.* to root@'%'identified by '这里填你的root账户密码';

数据管理

自动备份

创建备份目录

把备份文件放在 /data/backup/mysql下面,把脚本放在 /data/backup 下面:

1
2
[root@izwz99z5o9dc90keftqhlrz /]# mkdir -p /data/backup/mysql
[root@izwz99z5o9dc90keftqhlrz /]# cd /data/backup

创建脚本文件

1
2
3
4
5
6
7
8
9
10
11
12
[root@izwz99z5o9dc90keftqhlrz backup]# vi mysql_backup.sh

#!/bin/bash
# db_name 自己改这里哦
db_name='baizhan'
backup_dir='/data/backup/mysql/'
current_time=$(date +'%Y-%m-%d_%H%M%S')
filepath=$backup_dir$current_time'.sql.gz'
#此处没有使用 $db_password $db_user, 已经写入到配置文件中
echo '开始导出数据库...'
mysqldump --defaults-extra-file=/data/backup/my_mysql.cnf $db_name --net-buffer-length=10m | gzip > $filepath
echo '导出成功,文件名为: '$filepath

创建配置文件

1
2
3
4
5
6
7
8
9
10
11
[root@izwz99z5o9dc90keftqhlrz backup]# vi my_mysql.cnf

[mysqldump]
max_allowed_packet = 400M
host=127.0.0.1
user=root
password='SgDGfsrfEi3#@%#%ugslp%z!dAP'
[mysql]
host=127.0.0.1
user=root
password='SgDGfsrfEi3#@%#%ugslp%z!dAP'

脚本赋权

1
[root@izwz99z5o9dc90keftqhlrz backup]# chmod +x ./mysql_backup.sh

执行备份

1
2
3
[root@izwz99z5o9dc90keftqhlrz backup]# sh ./mysql_backup.sh
# 查看一下结果
[root@izwz99z5o9dc90keftqhlrz backup]# ll ./mysql

备份文件查看

1
2
3
4
5
6
7
[root@izwz99z5o9dc90keftqhlrz backup]# gzip -dc ./mysql/2019-12-22_180359.sql.gz > ./mysql/2019-12-22_180359.sql

[root@izwz99z5o9dc90keftqhlrz backup]# ll -sh ./mysql
total 44K
36K -rw-r--r-- 1 root root 36K Dec 22 18:06 2019-12-22_180359.sql
8.0K -rw-r--r-- 1 root root 5.9K Dec 22 18:03 2019-12-22_180359.sql.gz

自动恢复

创建脚本文件

继续在 /data/backup 目录下创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[root@izwz99z5o9dc90keftqhlrz backup]#  vi mysql_restore.sh


#!/bin/bash

if [ -z $1 ] || [ ! -f $1 ]
then
echo "请输入sql压缩文件(*.sql.gz)"
exit 1
fi
#输入你自己的数据库名称
db_name='jx_guides'
base_dir='/data/backup/mysql/'
gz_sql_file=`basename $1`

file_ext=${gz_sql_file##*.}
if [ $file_ext != 'gz' ]
then
echo '文件格式不正确,请输入 .sql.gz 文件'
exit 1
fi

sql_file=${gz_sql_file%.*}
echo '解压文件中...'
gzip -dc $base_dir$gz_sql_file > $base_dir$sql_file
echo '解压完成.'
echo '开始导入数据库...'

mysql --defaults-extra-file=/data/backup/my_mysql.cnf $db_name < $base_dir$sql_file

if [ -f $base_dir$sql_file ]
then
echo '删除临时文件.'
rm -f $base_dir$sql_file
fi
echo '导入完成.'

然后给脚本赋权

1
2
[root@izwz99z5o9dc90keftqhlrz backup]# chmod +x ./mysql_restore.sh

恢复数据库操作

1
2
3
4
5
6
[root@izwz99z5o9dc90keftqhlrz backup]# sh ./mysql_restore.sh ./mysql/2019-12-22_180359.sql.gz
解压文件中...
解压完成.
开始导入数据库...
删除临时文件.
导入完成.

清理过期文件

1
2
3
4
5
6
[root@izwz99z5o9dc90keftqhlrz mysql]# vi remove_backup.sh


#/bin/bash
# 删除15天前的备份
find /data/backup/mysql -type f -mtime +15 | xargs rm -f

添加可执行权限,然后执行删除

1
2
3
4
[root@izwz99z5o9dc90keftqhlrz mysql]# chmod +x ./remove_backup.sh 

#手动删除 15天前的备份
[root@izwz99z5o9dc90keftqhlrz mysql]# ./remove_backup.sh

定时任务

crontab是linux上执行定时任务的工具(MacOS和linux都是unix的变种系统,所有linux上可执行的指令大多数Mac上也可以执行)

使用方法
打开终端

  • crontab -e //编辑crontab任务,保存退出后自动加到crontab列表中执行
  • crontab -l //查看所有crontab 列表
  • crontab -r //删除用户目前的crontab.

文件编辑基本格式 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
*  *  *  *  *  command
分 时  日  月  周  命令

#周一到周五自动备份
0 3 * * 1-5 bash /Users/atx/Desktop/auto_script/lf_db_back.sh

//表示每晚的21:30重启apache。
30 21 * * * /usr/local/etc/rc.d/lighttpd restart

//表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart

//每一小时重启apache
* */1 * * * /usr/local/etc/rc.d/lighttpd restart

上面的数据库字段备份可以使用定时任务。

1
2
3
4
5
# 粘贴下面的内容, 数据库自动备份
0 1,12 * * * /data/backup/mysql_backup.sh # 每天凌晨1点,中午12点备份一次数据

# 下面这个就是脚本内容哦,添加这一句
0 1 * * * /data/backup/remove_backup.sh # 每天凌晨1点,自动删除15天[15是remove_backup.sh里面配置的]前的备份

mysql数据库导入

  • 先进入mysql
1
mysql -u root -p
  • 输入密码
  • use 要导入的数据库名(没有就新建一个,使用create database test;命令新建,再use test;,再set names utf8;设置一下编码)
1
source /home/test.sql;

选择要导入的数据库备份文件,进行导入就可以了

参考资料