安装和初始化数据库

删除已安装数据库

CentOS 7+ 不再默认使用 MySQL 数据库,而是 MariaDB 数据库。
直接安装 MySQL 会与 MariaDB 的文件冲突。
rpm -qa | grep mysql # 查看下是否有系统自带 mysql 的 rpm 包
rpm -qa | grep mariadb # 查看下是否有系统自带 mariadb 的 rpm 包
rpm -e --nodeps xxx 或  yum -y remove xxx # 如果有,需要删除自带的旧rpm包。

安装

centos7之前的安装方法

yum install mysql mysql-server # 安装 Mysql (版本可能有点低)

centos7这样安装mysql

下载地址直接到官网下载,地址:https://dev.mysql.com/downloads/mysql/

注意: 下载使用 yum 安装的包
23F4B305-593E-432D-956B-7578F79342F7

方法一

# 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

方法二(推荐)

rpm -qa | grep mysql # 查看下是否有系统自带mysql的rpm包
rpm -e --nodeps xxx 或  yum -y remove xxx # 如果有,需要删除自带的旧rpm包。
wget https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm
yum localinstall mysql57-community-release-el6-11.noarch.rpm
yum install mysql-community-server 

启动

service mysqld start # 启动Mysql
chkconfig mysqld on # 设置开机启动Mysql

初始化

mysql 5.x

接着输入(配置向导)

mysql_secure_installation

配置Mysql:(所有提示yes or no 都选yes)

Set root password? [Y/n] # 设置root密码
Remove anonymous users? [Y/n] # 删除匿名用户
Disallow root login remotely? [Y/n] # 禁止root用户远程登录
Remove test database and access to it? [Y/n] # 删除默认的 test 数据库
Reload privilege tables now? [Y/n] # 刷新授权表使修改生效

开发模式下往往需要授权root用户远程登录

mysql> grant all on *.*  to root@'%' identified by '111111';
mysql> flush privileges;

mysql 8.x

安装完mysql之后,会生成一个临时的密码让root用户登录

D88F7A0F-4EEC-4049-8107-5A78AEED0DC1

使用临时密码登录
mysql -u root -p

更改临时密码

此时只能用复杂密码,只有重置密码后才能更改密码策略然后设置简单密码
alter user 'root'@'localhost' identified by '111111aA,';

查看当前密码策略
show variables like 'validate_password.%';

67AB172C-647A-4861-BC95-5B31D51C4B7B
策略说明
validate_password.length 是密码的最小长度,默认是8,我们把它改成4(好像最小就是4位密码)
输入:set global validate_password.length=4;
validate_password.policy 验证密码的复杂程度,我们把它改成0
输入:set global validate_password.policy=0;
validate_password.check_user_name 用户名检查,用户名和密码不能相同,我们也把它关掉
输入:set global validate_password.check_user_name=off;

再执行修改密码

alter user 'root'@'localhost' identified by '111111';

中文乱码配置

mysql 5.x 为了避免数据库存放的中文是乱码,我们还需要设置Mysql的编码:

vi /etc/my.cnf

写入以下内容:

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

保存退出,重启Mysql:

service mysqld restart

数据库操作

数据库创建

新建数据库和用户

mysql 5.7

mysql -u root -p # 输入设置好的密码
create database ghost; # 创建ghost数据库
grant all privileges on testDB.* to test@'%' identified by '111111'; # 授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限),密码为111111,密码随意
flush privileges; # 重新读取权限表中的数据到内存,不用重启mysql就可以让权限生效

mysql 8.x

登录和创建数据库

mysql -u root -p # 输入设置好的密码
create database testDB; # 创建 testDB 数据库

创建用户
语法: create user '$userName'@'$host' identified by '$passWord';
如:create user 'testUser'@'%' identified by '111111';

$userName 代表你要创建的此数据库的新用户账号
$host 代表访问权限,如下

  • %代表通配所有host地址权限(可远程访问)
  • localhost 为本地权限(不可远程访问)
  • 指定特殊Ip访问权限 如10.138.106.102
    $passWord 代表你要创建的此数据库的新用密码

用户授权
语法:grant $auth on $databaseName.$table to '$userName'@'$host';
如:grant all privileges on testDB.* to testUser@'%'

$auth 代表权限,如下

  • all privileges 全部权限
  • select 查询权限
  • select,insert,update,delete 增删改查权限
  • select,[…]增…等权限

$databaseName 代表数据库名

$table 代表具体表,如下

  • *代表全部表
  • A,B 代表具体A,B表,如 testDB.A

$userName 代表用户名

$host 代表访问权限,同上

刷新

切记一定要刷新授权才可生效
flush privileges;

查看用户权限
语法:show grants for '$userName'@'$host';
如:show grants for 'testUser'@'localhost';

$userName 代表用户名
$host 代表访问权限,同上

mysql的一些常用命令

  1. 登录:mysql -u root -p
  2. 查询所有数据库:show databases;
  3. 使用数据库:use databaseName;
  4. 查询所有表:show tables;
  5. 查询表的所有字段的数据:select * from tableName;
  6. 删除数据库:drop database database_name;
  7. 删除用户:Delete FROM user Where User='userName'
  8. 简单描述表结构,字段类型:desc tabl_name;

数据库备份和恢复

mysqldump基本语法:

mysqldump -u username -p dbname table1 table2 ...-> BackupName.sql

dbname:表示数据库的名称;
table1和table2:表示需要备份的表的名称,为空则整个数据库备份;
BackupName.sql:参数表设计备份文件的名称,文件名前面可以加上一个绝对路径。通常将数据库被分成一个后缀名为sql的文件;

数据备份

  • 备份一个数据库:mysqldump -u root -p dbname > D:\backup.sql
  • 备份多个数据库:mysqldump -u root -p --databases dbname2 dbname2 > Backup.sql
  • 备份所有数据库:mysqldump -u root -p -all-databases > BackupName.sql
  • 备份表:mysqldump -u root -p dbname table1 table2 > D:\backup.sql

数据还原

还原使用mysqldump命令备份的数据库的语法如下:
mysql -u root -p [dbname] < backup.sql

数据库自动备份

备份

1,登陆远程机  执行备份命令  结果集压缩传输到本地
2,使用 crontab 定时自动备份
[root@xx ~]# vim /root/back.sh
写入
ssh xxx "mysqldump -f --all-databases|bzip2 -c" > /backup/$(date +"%Y-%m-%d").bzip2
注意:ssh xxx 需要配置ssh免密码登陆。请移步: 使用key登录远程服务器

解压到文件

bzip2 -c -d $(date +%w).bzip2 > all.sql

还原到数据库

bzip2 -c -d $(date +%w).bzip2|mysql

定时器
查看定时器的相关参数含义

[root@xx ~]# cat /etc/crontab
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

创建定时器

[root@xx ~]# crontab -e   // 打开一个vi编辑器
写入
* * * * * /root/backmysql.sh

保存退出,重启定时器

[root@xx ~]# service crond restart 
systemctl restart  crond.service(centos 7)

到此,就完成了计划任务的自动定时备份数据库