一、项目名称:MySQL创建与管理
二、项目要求:
1. 在centos上安装mysql
2. 创建两个普通用户,每个用户分别管理一张表
三、实验过程:
1、下载、安装mysql
#cd /usr/local/src/ //建议所有软件包可以放到此目录下
#https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz // 下载mysql压缩包
#tar zxvf mysql-5.6.47-linux-glibc2.12-x86_64.tar.gz //解压
#useradd mysql //创建mysql用户
#mkdir -p /data/mysql //创建目录
#chown -R mysql:mysql /data/mysql // 更改权限,不更改后续操作就会出问题
#[ -d /usr/local/mysql ] && mv mysql-5.6.47-linux-glibc2.12-x86_64 /usr/local/mysql //挪动位置
#cd /usr/local/mysql/ //进入修改目录后的位置
#ls //查看是否有文件
bin docs lib man README share support-files
data include LICENSE mysql-test scripts sql-bench
#yum install -y perl-Data-Dumper.x86_64 //下载缺失的perl模块3
#./scripts/mysql_install_db --user=mysql --datadir=/data/mysql //初始化,指定用户,指定数据库目录
#echo $? //若难分辨命令产生的结果是否正确,可以使用此命令检验
0
#cp support-files/my-default.cnf /etc/my.cnf //拷贝配置文件
cp: overwrite ‘/etc/my.cnf’? y
#vi /etc/my.cnf //修改配置文件、添加datadir、socket、port
把 basedir、datadir、port 前的#号去掉,修改为:
basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306
#cp support-files/mysql.server /etc/init.d/mysql //移动启动脚本
#vi /etc/init.d/mysql //修改启动脚本。找到下面这两行定义basedir和datadir
basedir=/usr/local/mysql
datadir=/data/mysql
#chkconfig --add mysql //设置开机自启动
#/etc/init.d/mysql start //启动mysql
2、安全配置向导
#ln -s /usr/local/mysql/bin/* /usr/bin
# mysql_secure_installation
回车
输入“y”
123456 //配置数据库密码
123456 //确认密码
输入“y” //是否删除匿名用户,生产环境建议删除
输入“n” //是否禁止root远程登录,根据自己的需求选择Y/n并回车
输入“y” //是否删除test数据库
输入“y” //是否重新加载权限表
3、登入数据库、创建两个用户、创建两张表
# mysql -uroot -p
Enter password:
> show databases; //查看已有数据库
> use mysql
> select database(); //查看当前所在的数据库
> create user 'user1'@'localhost' identified by '123';
> create user 'user2'@'localhost' identified by '123';
> select user(); //查看当前所在用户
> select * from user; //查看已创建的用户
> create table if not exists `tables1`( //创建第一张名为 tables1 的表
-> tables1 INT NOT NULL AUTO_INCREMENT,
-> tables1_titile VARCHAR(100) NOT NULL,
-> tables1_author VARCHAR(40) NOT NULL,
-> submission_date DATE, PRIMARY KEY ( tables1 )
-> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
> create table if not exists `tables2`( //创建第二张名为 tables2 的表
-> tables2 INT NOT NULL AUTO_INCREMENT,
-> tables2_titile VARCHAR(100) NOT NULL,
-> tables2_author VARCHAR(40) NOT NULL,
-> submission_date DATE, PRIMARY KEY ( tables2 )
-> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
> show tables;
> desc tables1; //查看表结构
> desc tables2; //查看表结构
4、给user1和user2赋予权限,分别管理tables1、tables2
> grant select,insert,update on mysql.tables1 to 'user1'@'localhost'; //赋予查询、插入、更新权限,看具体需求
> grant select,insert,update on mysql.tables2 to 'user2'@'localhost';
> show grants; //查看现有规则
5、测试。分别登入user1、user2,查看各自数据库中是否只有属于自己的表
# mysql -uuser1 -p
Enter password: //输入密码:123
> select user();
> show databases;
> use mysql;
> select database();
> show tables;
四、额外实验:
制定一个定时任务:每天凌晨三点备份一次数据库
实验过程:
#mkdir -p /home/backup
#cd /home/backup
#vi mysql_bak.sh //编辑shell脚本
#!/bin/bash
mysqldump mysql > /home/backup/mysql_$(date +%Y%m%d_%H%M%S).sql
如果是直接在脚本中明文密码,执行脚本会有错误警告,
所以这里没有设置用户密码,还需进入 /etc/my.cnf 编辑如下内容:
[mysqldump]
user=your_user
password=your_password //这里的 your_user和 your_password 输入自己配置的用户密码即可!
#chmod u+x mysql_bak.sh
执行定时任务:
#crontab -e //编辑工作表
0 3 * * * /home/backup/mysql_bak.sh //每天凌晨三点备份一次数据库 (我感觉是这样。。。(+_+)?)
* * * * * /home/backup/mysql_bak.sh //这是每分钟备份一次,实测可以
#crontab -l //列出工作表里的命令