美文网首页
CentOS7 RPM安装Mysql 及授权与备份

CentOS7 RPM安装Mysql 及授权与备份

作者: liurongming | 来源:发表于2021-10-08 11:33 被阅读0次

    CentOS7 RPM安装Mysql :

    查看linux操作系统及内核版本
    [root@itdev9901 ~]# cat /etc/redhat-release # 查看操作系统版本
    CentOS Linux release 7.9.2009 (Core) 
    [root@itdev9901 ~]# uname -r # 查看系统内核版本
    3.10.0-1160.31.1.el7.x86_64
    [root@itdev9901 ~]#
    
    下载安装包
    wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.30-1.el7.x86_64.rpm-bundle.tar
    选择 RPM Bundle,下载完记得解压  tar -xvf xxx.tar
    # 创建目录并解压
    mkdir -p /opt/mysql
    tar -xvf mysql-5.7.30-1.el7.x86_64.rpm-bundle.tar -C /opt/mysql
    
    卸载旧版本的MySql (没有的话,则跳过此步骤)
    查看旧版本MySql
    rpm -qa | grep mysql
    逐个删除掉旧的组件
    使用命令rpm -e --nodeps {-file-name}进行移除操作,移除的时候可能会有依赖,要注意一定的顺序。
    [root@iep-02 mysql]# rpm -qa|grep mariadb
    [root@iep-02 mysql]# yum remove mariadb-libs
    
    使用 rpm 命令安装MySql组件

    使用命令rpm -ivh {-file-name}进行安装操作
    按照依赖关系依次安装rpm包 依赖关系依次为common→libs→client→server
    cd /opt/mysql

    # 依次执行
    rpm -ivh mysql-community-common-5.7.30-1.el7.x86_64.rpm
    rpm -ivh mysql-community-libs-5.7.30-1.el7.x86_64.rpm
    rpm -ivh mysql-community-client-5.7.30-1.el7.x86_64.rpm
    rpm -ivh mysql-community-server-5.7.30-1.el7.x86_64.rpm
    

    注:ivh中, i-install安装;v-verbose进度条;h-hash哈希校验

    部分机器出现错误
    [root@iep-02 mysql]# rpm -ivh mysql-community-libs-5.7.30-1.el7.x86_64.rpm
    警告:mysql-community-libs-5.7.30-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
    错误:依赖检测失败:
            mysql-community-common(x86-64) >= 5.7.9 被 mysql-community-libs-5.7.30-1.el7.x86_64 需要
            mariadb-libs 被 mysql-community-libs-5.7.30-1.el7.x86_64 取代
    [root@iep-02 mysql]#
    解决:清除yum里所有mysql依赖包
    [root@iep-02 mysql]# rpm -qa|grep mysql
    [root@iep-02 mysql]# yum remove mysql-libs
    或者:
    [root@iep-02 mysql]# rpm -qa|grep mariadb
    [root@iep-02 mysql]# yum remove mariadb-libs
    
    再次安装成功
    [root@iep-02 mysql]# rpm -ivh mysql-community-common-5.7.30-1.el7.x86_64.rpm
    警告:mysql-community-common-5.7.30-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:mysql-community-common-5.7.30-1.e################################# [100%]
    [root@iep-02 mysql]# rpm -ivh mysql-community-libs-5.7.30-1.el7.x86_64.rpm
    警告:mysql-community-libs-5.7.30-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:mysql-community-libs-5.7.30-1.el7################################# [100%]
    [root@iep-02 mysql]#
    
    [root@iep-02 mysql]# rpm -ivh mysql-community-client-5.7.30-1.el7.x86_64.rpm
    警告:mysql-community-client-5.7.30-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:mysql-community-client-5.7.30-1.e################################# [100%]
    [root@iep-02 mysql]#
    

    注意细节:
    1> 执行 yum remove mysql-libs 命令后,会自动删除掉 /etc/ 下的 my.cnf 文件
    2> 对于安装mysql组件,只有安装了 mysql-community-server-5.7.22-1.el7.x86_64.rpm 组件,才会:

    a). 在 /etc/下生成 my.cnf 文件 和 my.cnf.d 文件夹
    
    b). 在/var/lib/下生产以下三个文件夹
    
    c). 在/var/log/ 下生成 mysqld.log 文件
    
    d). 在/var/run/ 下生成 mysqld 目录
    
    查看安装路径
    rpm -qal |grep mysql
    [root@itdev9903 run]# rpm -qal |grep mysql
    /usr/bin/mysql
    /usr/bin/mysql_config_editor
    /usr/bin/mysqladmin
    /usr/bin/mysqlbinlog
    /usr/bin/mysqlcheck
    /usr/bin/mysqldump
    /usr/bin/mysqlimport
    /usr/bin/mysqlpump
    /usr/bin/mysqlshow
    /usr/bin/mysqlslap
    /usr/share/doc/mysql-community-client-5.7.30
    /usr/share/doc/mysql-community-client-5.7.30/LICENSE
    /usr/share/doc/mysql-community-client-5.7.30/README
    ...
    

    登录并创建MySql密码
    1 启动MySql
    安装完后,使用命令 service mysqld start 或 systemctl start mysqld.service 启动MySQL服务。(如果mysql服务无法启动,就重启一下系统)

    systemctl start mysqld.service    启动mysql
    systemctl status mysqld.service  查看mysql状态
    systemctl stop mysqld.service   关闭mysql
    
    查看mysql进程 ps -ef|grep mysql
    查看3306端口 netstat -anop|grep 3306
    

    查看状态

    [root@iep-02 mysql]# systemctl status mysqld.service
    ● mysqld.service - MySQL Server
       Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
       Active: inactive (dead)
         Docs: man:mysqld(8)
               http://dev.mysql.com/doc/refman/en/using-systemd.html
    [root@iep-02 mysql]#
    
    启动再查看状态
    [root@iep-02 mysql]# systemctl start mysqld.service
    [root@iep-02 mysql]# systemctl status mysqld.service
    ● mysqld.service - MySQL Server
       Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
       Active: active (running) since 四 2021-07-08 15:57:16 CST; 4s ago
         Docs: man:mysqld(8)
               http://dev.mysql.com/doc/refman/en/using-systemd.html
      Process: 4785 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
      Process: 4723 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
     Main PID: 4789 (mysqld)
       CGroup: /system.slice/mysqld.service
               └─4789 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
    
    7月 08 15:57:12 iep-02 systemd[1]: Starting MySQL Server...
    7月 08 15:57:16 iep-02 systemd[1]: Started MySQL Server.
    [root@iep-02 mysql]#
    
    查看是否安装成功
    [root@iep-02 mysql]# ps -ef|grep mysql
    mysql     4789     1  0 15:57 ?        00:00:00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
    root      4852  2069  0 15:57 pts/2    00:00:00 grep --color=auto mysql
    [root@iep-02 mysql]# lsof -i
    COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    chronyd  656 chrony    5u  IPv4  15657      0t0  UDP localhost:323
    chronyd  656 chrony    6u  IPv6  15658      0t0  UDP localhost:323
    sshd     915   root    3u  IPv4  16174      0t0  TCP *:ssh (LISTEN)
    sshd     915   root    4u  IPv6  16176      0t0  TCP *:ssh (LISTEN)
    sshd    1550   root    3u  IPv4  24430      0t0  TCP iep-02:ssh->172.18.5.116:49304 (ESTABLISHED)
    sshd    1993   root    3u  IPv4  51377      0t0  TCP iep-02:ssh->172.18.5.116:62915 (ESTABLISHED)
    sshd    2062   root    3u  IPv4  51494      0t0  TCP iep-02:ssh->172.18.5.116:51224 (ESTABLISHED)
    mysqld  4789  mysql   21u  IPv6  55133      0t0  TCP *:mysql (LISTEN)
    [root@iep-02 mysql]# netstat -anop|grep 3306
    tcp6       0      0 :::3306                 :::*                    LISTEN      4789/mysqld          off (0.00/0/0)
    [root@iep-02 mysql]#
    

    因为服务已经启动了,因此能够用root和这个密码登录了:
    mysql -u root -p
    password 输入本身得到的密码

    提示需要
    [root@iep-02 mysql]# mysql -u root -p
    Enter password:
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    [root@iep-02 mysql]#
    

    登陆mysql修改root密码
    由于MySQL5.7.4之前的版本中默认是没有密码的,登录后直接回车就可以进入数据库,进而进行设置密码等操作。其后版本对密码等安全相关操作进行了一些改变,在安装过程中,会在安装日志中生成一个临时密码。
    怎么找到这个临时密码呢?

    使用:
    grep 'temporary password' /var/log/mysqld.log
    即可查询到类似于如下的一条日志记录:
    
    [root@iep-02 mysql]# grep 'temporary password' /var/log/mysqld.log
    2021-07-08T07:57:14.452490Z 1 [Note] A temporary password is generated for root@localhost: -6Pxiaa>:W_L
    [root@iep-02 mysql]#
    
     -6Pxiaa>:W_L 即为登录密码。使用这个随机密码登录进去,然后修改密码,使用命令:
     mysql -uroot -p 
    
    root@iep-02 mysql]#  mysql -uroot -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 5
    Server version: 5.7.30
    
    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>
    
    操作提示需要修改密码
    mysql> status
    ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
    mysql>
    
    简单密码不会通过
    alter user root@localhost identified by '123456';
    mysql> alter user root@localhost identified by '123456';
    ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    mysql>
    或者:
    mysql> set password for root@localhost = password('123456');
    ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    mysql>
    
    生成随机密码
    cat /dev/urandom | LC_ALL=C tr -dc "[:alnum:]" | fold -w 10 |head -10
    cat /dev/urandom | LC_ALL=C tr -dc "[:graph:]" | fold -w 10 |head -10
    
    更改密码
    alter user root@localhost identified by 'password';
    
    mysql> alter user root@localhost identified by 'password';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> exit
    Bye
    [root@iep-02 mysql]#
    
    再次登录输入新密码
    mysql -uroot -p
    mysql> show databases
        -> ;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.00 sec)
    
    mysql>
    
    此时只能本机访问
    mysql> use mysql;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> show tables;
    +---------------------------+
    | Tables_in_mysql           |
    +---------------------------+
    | columns_priv              |
    | db                        |
    | engine_cost               |
    | event                     |
    | func                      |
    | general_log               |
    | gtid_executed             |
    | help_category             |
    | help_keyword              |
    | help_relation             |
    | help_topic                |
    | innodb_index_stats        |
    | innodb_table_stats        |
    | ndb_binlog_index          |
    | plugin                    |
    | proc                      |
    | procs_priv                |
    | proxies_priv              |
    | server_cost               |
    | servers                   |
    | slave_master_info         |
    | slave_relay_log_info      |
    | slave_worker_info         |
    | slow_log                  |
    | tables_priv               |
    | time_zone                 |
    | time_zone_leap_second     |
    | time_zone_name            |
    | time_zone_transition      |
    | time_zone_transition_type |
    | user                      |
    +---------------------------+
    31 rows in set (0.00 sec)
    
    mysql> select user,host from user;
    +---------------+-----------+
    | user          | host      |
    +---------------+-----------+
    | mysql.session | localhost |
    | mysql.sys     | localhost |
    | root          | localhost |
    +---------------+-----------+
    3 rows in set (0.00 sec)
    
    mysql>
    
    mysql>  show grants;
    +---------------------------------------------------------------------+
    | Grants for root@localhost                                           |
    +---------------------------------------------------------------------+
    | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
    | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
    +---------------------------------------------------------------------+
    2 rows in set (0.00 sec)
    
    mysql>
    
    设置外部远程访问
    权限:
    #授予root用户远程访问权限:
    mysql> grant all privileges on *.* to root@'%' identified by 'password' WITH GRANT OPTION;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    mysql>
    
    # 刷新权限,使设置生效, OK。
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql>
    
    #再次查看权限:
    mysql> show grants;
    +---------------------------------------------------------------------+
    | Grants for root@localhost                                           |
    +---------------------------------------------------------------------+
    | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
    | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
    +---------------------------------------------------------------------+
    2 rows in set (0.00 sec)
    
    mysql>
    

    开启3306端口 远程访问

    firewall-cmd --zone=public --add-port=3306/tcp --permanent  
    #刷新防火墙
    firewall-cmd --reload  
    在远程机器上测试远程连接:  mysql -h 172.18.5.209 -uroot -p
    
    创建用户并授权

    一. 创建用户
    命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password';

    说明:
    username:你将创建的用户名
    host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
    password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器

    # 例子:
    CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';
    CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY '123456';
    CREATE USER 'pig'@'%' IDENTIFIED BY '123456';
    CREATE USER 'pig'@'%' IDENTIFIED BY '';
    CREATE USER 'pig'@'%';
    

    二. 授权:
    命令:GRANT privileges ON databasename.tablename TO 'username'@'host'
    说明:
    privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
    databasename:数据库名
    tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*

    # 例子:
    GRANT SELECT, INSERT ON test.user TO 'pig'@'%';
    GRANT ALL ON *.* TO 'pig'@'%';
    GRANT ALL ON maindataplus.* TO 'pig'@'%';
    

    注意:
    用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
    GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;

    细分授权

    mysql中可以给一个用户授予如select,insert,update,delete等其中的一个或者多个权限,主要使用grant命令,用法格式为:
    grant 权限 on 数据库对象 to 用户

    一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。 
    grant select on testdb.* to common_user@'%'
    grant insert on testdb.* to common_user@'%' 
    grant update on testdb.* to common_user@'%' 
    grant delete on testdb.* to common_user@'%' 
    或者,用一条 MySQL 命令来替代: 
    grant select, insert, update, delete on testdb.* to common_user@'%'
    
    二.设置与更改用户密码
    
    命令:SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
    
    如果是当前登陆用户用:
    SET PASSWORD = PASSWORD("newpassword");
    例子:
    SET PASSWORD FOR 'pig'@'%' = PASSWORD("123456");
    
    三. 撤销用户权限
    命令:REVOKE privilege ON databasename.tablename FROM 'username'@'host';
    说明:
    privilege, databasename, tablename:同授权部分
    
    例子:
    REVOKE SELECT ON *.* FROM 'pig'@'%';
    注意:
    假如你在给用户'pig'@'%'授权的时候是这样的(或类似的):GRANT SELECT ON test.user TO 'pig'@'%',则在使用REVOKE SELECT ON *.* FROM 'pig'@'%';命令并不能撤销该用户对test数据库中user表的SELECT 操作。相反,如果授权使用的是GRANT SELECT ON *.* TO 'pig'@'%';则REVOKE SELECT ON test.user FROM 'pig'@'%';命令也不能撤销该用户对test数据库中user表的Select权限。
    
    具体信息可以用命令SHOW GRANTS FOR 'pig'@'%'; 查看。
    
    四.删除用户
    命令:DROP USER 'username'@'host';
    
    mysql命令导入导出sql文件

    window下

    1.导出整个数据库,首先打开要导出的目录
    
    mysqldump -u 用户名 -p 数据库名 > 导出的文件名
    
    mysqldump -u dbuser -p dbname > dbname.sql 下一行需要输入密码
    
    mysqldump -uroot -ppasswd [dbname]> english.sql 在本行直接输入密码
    
    2.导出一个表
    
    mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
    
    mysqldump -u dbuser -p dbname users> dbname_users.sql
    
    3.导出一个数据库结构
    
    mysqldump -u dbuser -p -d --add-drop-table dbname >d:/dbname_db.sql
    
    -d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
    
    4.导入数据库
    
    常用source 命令
    
    进入mysql数据库控制台,如
    
    mysql -u root -p
    
    mysql>use 数据库
    
    然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
    
    mysql>source d:/dbname.sql
    

    linux下

    一、导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):
    
    1、导出数据和表结构:
    
    mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql
    
    \#/usr/local/mysql/bin/  mysqldump -uroot -p abc > abc.sql
    
    敲回车后会提示输入密码
    
    2、只导出表结构
    
    mysqldump -u用户名 -p密码 -d 数据库名 > 数据库名.sql
    
    \#/usr/local/mysql/bin/  mysqldump -uroot -p -d abc > abc.sql
    
    注:/usr/local/mysql/bin/ ---> mysql的data目录
    
    二、导入数据库
    
    1、首先建空数据库
    
    mysql>create database abc;
    
    2、导入数据库
    
    方法一:
    
    (1)选择数据库
    
    mysql>use abc;
    
    (2)设置数据库编码
    
    mysql>set names utf8;
    
    (3)导入数据(注意sql文件的路径)
    
    mysql>source /home/abc/abc.sql;
    
    方法二:
    
    mysql -u用户名 -p密码 数据库名 < 数据库名.sql
    
    #mysql -uabc_f -p abc < abc.sql
    
    权限列表:
    • ALTER: 修改表和索引。
    • CREATE: 创建数据库和表。
    • DELETE: 删除表中已有的记录。
    • DROP: 抛弃(删除)数据库和表。
    • INDEX: 创建或抛弃索引。
    • INSERT: 向表中插入新行。
    • REFERENCE: 未用。
    • SELECT: 检索表中的记录。
    • UPDATE: 修改现存表记录。
    • FILE: 读或写服务器上的文件。
    • PROCESS: 查看服务器中执行的线程信息或杀死线程。
    • RELOAD: 重载授权表或清空日志、主机缓存或表缓存。
    • SHUTDOWN: 关闭服务器。
    • ALL: 所有权限,ALL PRIVILEGES同义词。
    • USAGE: 特殊的 "无权限" 权限。
    mysql命令行清屏

    有4种方法:
    system clear
    sytem reset
    ! clear
    commond+l

    备份

    # 建备份账号 
    grant select,lock tables on *.* to 'barkup'@'192.168.100.%' identified by 'pwd@123';
     
    # 不带库
    mysqldump -u dbuser -p'passwd' --single-transaction --default-character-set=utf8 dbname > dbname_$(date '+%Y%m%d_%H%M%S').sql
    
    # 带库
    mysqldump -u dbuser -p'passwd' --single-transaction --default-character-set=utf8 -B dbname > dbname_$(date '+%Y%m%d_%H%M%S').sql
    
    # 导入
    mysql -uroot -p'password'  db_dbtest < db_20210804_152823.sql
    
    # mysqldump工具备份
    # 备份整个数据库
    mysqldump -u root -h host -p dbname > backdb.sql
    #备份数据库中的某个表
    mysqldump -u root -h host -p dbname tbname1, tbname2 > backdb.sql
    # 备份多个数据库
    mysqldump -u root -h host -p --databases dbname1, dbname2 > backdb.sql
    #备份系统中所有数据库
    mysqldump -u root -h host -p --all-databases > backdb.sql
    # 样例
    mysqldump -uroot -p'password' --single-transaction --default-character-set=utf8 --all-databases > dbackdb_$(date '+%Y%m%d_%H%M%S').sql
    
    • shell备份

      #!/bin/bash
      <!--定义数据库连接、目标信息库等信息:-->
      user="repl"      <!--授权的账户-->
      pass="passwd"       <!--授权账户的密码-->
      host="172.18.5.209"    <!--目标服务器IP地址-->
      conn="-u $user -p$pass -h $host"
      data1="db1"             <!--备份的数据库名字-->
      data2="db2"    <!--备份的数据库名字-->
      bak="/opt/backup"          <!--指定备份目录-->
      cmd="/usr/bin/mysqldump"      <!--指定命令工具-->
      time=`date +%Y-%m-%d-%H-%M`      <!--定义时间变量-->
      name_1="$data1-$time"        <!--定义备份后的名字-->
      name_2="$data2-$time"        <!--定义备份后的名字-->
      cd $bak           <!--切换至备份目录下-->
      $cmd $conn --databases $data1 > $name_1.sql      <!--备份为.sql文件-->
      $cmd $conn --databases $data2 > $name_2.sql      <!--备份为.sql文件-->
      /bin/tar zcf $name_1.tar.gz $name_1.sql --remove > /dev/null    <!--打包后删除源文件-->
      /bin/tar zcf $name_2.tar.gz $name_2.sql --remove > /dev/null    <!--打包后删除源文件-->
      
    • 安全备份

    # 随机密码
    cat /dev/urandom | LC_ALL=C tr -dc "[:graph:]" | fold -w 10 |head -10
    # 建备份账号 
    grant select,reload,REPLICATION CLIENT, REPLICATION SLAVE,lock tables on *.* to 'barkup'@'10.%.%.%' identified by 'p0B4`^1ukW';
    grant all privileges on *.* to 'barkup'@'localhost' identified by 'p0B4`^1ukW';
    
    # 刷新权限
    FLUSH PRIVILEGES;
    
    # 安全登录解决的方法。
    # mysql_config_editor的--login-path可以完成该工作。
    # mysql_config_editor命令使用:
    mysql_config_editor set --login-path=mydbbarkup --host=localhost --port=3306 --user=barkup --password
    # 完成配置后,生成一个mydb的登录点(login-path),密钥保存在$HOME/.mylogin.cnf。以后访问数据库只要指定login-path的名称即可
    mysql --login-path=mydbbarkup
    
    # 全量备份
    # --single-transaction: 基于此选项能实现热备InnoDB表;因此,不需要同时使用--lock-all-tables;
    # --master-data=2  记录备份那一时刻的二进制日志的位置,并且注释掉,1是不注释的
    # --databases hellodb 指定备份的数据库
    backup_dir="/data/backup/mysql"
    database="test"
    filename="${backup_dir}/${database}_`date +%Y-%m-%d-%H%M`.sql"
    mysqldump --login-path=mydbbarkup --single-transaction --master-data=2 --default-character-set=utf8 --set-gtid-purged=OFF --triggers --routines --events --dump-date --databases $database > $filename
    
    #!/bin/bash
    
    # 全库备份
    # sh all_barkup.sh db_name
    # 默认为sywn
    # 第一个参数:db_name
    
    # 登录密钥
    login_path="mydbbarkup"
    # 备份路径
    # 提前准备目录
    backup_dir="/data/backup/mysql"
    backup_dir="/root/test"
    
    # 备份命
    cmd="/usr/bin/mysqldump"  
    # 当前时间
    time=`date +%Y-%m-%d-%H-%M` 
    
    bark_all()
    {
        # 需备份库名
        db_name=$1
        database=${db_name:-'sywn'}
    
        # 保存文件名
        filename="${backup_dir}/${database}_$time.sql"
    
        # 执行备份
        $cmd --login-path=${login_path} \
        --single-transaction \
        --master-data=2 \
        --default-character-set=utf8 \
        --set-gtid-purged=OFF \
        --triggers --routines --events \
        --dump-date \
        --databases $database > $filename
    }
    
    # 执行
    CALL_DO() {
        while [ $# -ne 0 ]
        do
            # 打印特殊变量$1的值,及特殊变量$#的值
            echo "Current Parameter: $1, Remaining $#."
            bark_all $1                     
            # 将位置参数左移一位
            shift
            done
    }
    
    # 执行
    CALL_DO $*
    
    • 清屏

      system clear
      
    • 查看权限

      # 权限列表 
      SHOW PRIVILEGES;
      # 单用户权限
      show grants for dbdev@'%';
      
    • 日志

      # general_log会记录所有的SQL操作,一般不建议开启。
      show global variables like '%general%';
      tail -f  /var/lib/mysql/itdev9903.log | grep "Connect"
      
      # 开启general_log
      set global general_log=on;
      
    • 授权

      grant all privileges on *.* to root@'172.18.5.127' identified by 'password' WITH GRANT OPTION;
      
    • 回收权限

      # 回收所有
      revoke all privileges,grant option from 'xxx'@'%';
      # 回收
      REVOKE SELECT ON *.* FROM 'xxx'@'%';
      
    • 常用操作

      create database if not exists db default charset utf8 collate utf8_general_ci;
      CREATE USER 'dbdev'@'%' IDENTIFIED BY 'NGRDNag(f8E';
      grant insert,delete,update,select,create,drop,alter,index,lock tables on db.* to 'dbdev'@'%' ;
      FLUSH PRIVILEGES;
      DROP USER 'dbdev'@'%';
      
    • 查看用户权限

      show grants for root@'%';
      
    • 删除用户

      Delete FROM user Where User='root' and Host='172.18.5.127';
      
    • 刷新

      flush privileges;
      

    相关文章

      网友评论

          本文标题:CentOS7 RPM安装Mysql 及授权与备份

          本文链接:https://www.haomeiwen.com/subject/mfqxoltx.html