数据库管理

数据库管理

安装mariadb数据库

1 yum -y groupinstall mariadb

 

修改配置文件

vim /etc/my.cnf

    # innodb 支持数据回滚
    innodb_file_per_talbe = 1

    # 开启日志功能
    log-bin = /var/lib/mysql/bin-log

    :wq

 

启动服务,并添加开机启动脚本

1 systemctl restart mariadb
2 systemctl enable mariadb

 

安全初始化数据库

mysql_secure_installation

Enter current password for root (enter for none): <回车>

Set root password? [Y/n] Y

New password: 

Re-enter new password:

Remove anonymous users? [Y/n] Y

Disallow root login remotely? [Y/n]

Remove test database and access to it? [Y/n] Y

Reload privilege tables now? [Y/n] Y

 

数据库选项和参数

# 指定用户名

  mysql -u

# 指定密码

  mysql -p

# 执行一条SQL语句然后退出

  mysql -e '...'

# 指定连接主机

  mysql -h x.x.x.x

# 指定端口

  mysql -P(p为指定密码选项时) <0~65535>

# 结束符

  /d

# 整行显示输出

  /G

 

忘记数据库密码

# 1. 修改配置文件
    vim /etc/my.cnf

        # 跳过授权表认证
        skip-grant-tables = 1

        # 关闭网络连接数据库 
        skip-networking = 1

# 2. 重启数据库服务

    systemctl restart mariadb

# 3. 进入数据库命令管理界面

    mysql

    use mysql

    update user set password=password('123456') where user='root' and host='localhost';

    flush privileges;

# 4.还原配置文件

    vim /etc/my.cnf

 

数据库用户管理

# 创建用户

  create user admin@'%' identified by '123456';

# 授权 all位置还可以填insert、update、delete、select, *.* 第一个*代表所有数据库,第二个*代表所有表,'%'代表任意IP地址链接,with option代表有权向下授权

  grant all on *.* to admin@'%' with option;

# 刷新授权表

  flush privileges;

# 回收权限

  revoke all on *.* from admin@'%';

# 查看授权信息

  show grants for admin@'%';

 

主从数据库

主数据库

# 追加修改配置文件

    vim /etc/my.cnf

        server-id = 100 

# 重启服务

    systemctl restart mariadb

# 从数据库用户指定

    >grant replication client,replication slave on *.* to repl@'%' identified by '123456';

    >flush privileges

    >show master status\G;

# 记录下Position的值,从数据库读取日志文件需要

 

从数据库

# 追加修改配置文件

    vim /etc/my/cnf

        relay-log = /var/lib/mysql/relay-log
        server-id = 200 

# 重启数据库服务

    systemctl restart mariadb

# 指定主数据库

    change master to master_host='198.168.198.128',master_user='repl',master_password='123456',master_log_file='bin-log.000004',master_log_pos=1642;

    slave start;

    show slave status\G;

 

数据库备份

使用备份工具

# 创建测试数据库,表,记录

    create database test charset='utf8';

    use test;

    create table tb_test( id int primary key auto_increment, name char(10) not null, age int not null, gender enum('', '') not null, description char(128));

    desc tb_test;

    insert into tb_test (name, age, gender, description) values ('张三', 33, '', '无业游民');

    insert into tb_test (name, age, gender, description) values ('李四', 44, '', 'CEO');

    insert into tb_test (name, age, gender, description) values ('王五', 22, '', '富二代');

    select * from tb_test;


# 全库备份

    mysqldump -uroot -p123456 --all-databases --lock-all-tables --flush-logs > all.dump

# 单库备份,bin-log.000004为号码最大的,即最新备份日志
    
    cd /var/lib/mysql/

    mysqlbinlog -d test bin-log.000004 >  /mysql_backup/increment.dump

# 单库全备份

    mysqlbinlog bin-log.000004 >  /mysql_backup/increment_all.dump

 

恢复数据库

# 模拟数据库遭遇损坏

    cd /var/lib/mysql

    rm -rf ./*

# 重启数据库服务

    systemctl restart mariadb 

# 重新初始化安装

    mysql_secure_installation

# 由于准备要使用备份文件恢复数据库,所有要先关闭二进制日志功能,避免对恢复过程做无用的备份

    mysql -uroot -p123456

    >set sql_log_bin = 0;

# 恢复

    # 方式一

    # 使用之前的全备文件恢复

    mysql -uroot -p123456 < all.dump

    # 方式二

    # 使用增量文件恢复

    >source increment.dump

 

逻辑卷快照配备数据库

# 准备逻辑卷,可以参考本人博客

    fdisk /dev/sdc

    pvcreate /dev/sdc

    vgcreate vg0 /dev/sdc

    lvcreate -L 2000M -n lvm vg0

# 制作文件系统

    mkfs.ext4 /dev/vg0/lvm 

# 配置自动挂载

    blkid /dev/vg0/lvm >> /etc/fstab

    vim /etc/fstab

        UUID="365a374e-17c9-4fbc-8920-01ed56b84fc7" /mnt/lvm ext4 defaults 0 0

    mkdir /mnt/lvm

    mount -a

    df -h 

#  创建数据库数据存储目录

    mkdir /mnt/lvm/data

# 修改目录权限

    chown mysql:mysql /mnt/lvm/data/

# 修改mysql配置文件

    vim /etc/my.cnf

        datadir = /mnt/lvm/data

# 为了集中讨论本文重点,这里关闭SELinux

    setenforce 0

# 重启服务

    systemctl restart mariadb

# 备份

    # 锁表

        mysql -uroot -p123456 -e'flush tables with read lock'

    # 逻辑快照

        lvcreate -L 2000M -n snapshoot -s /dev/vg0/lvm

    # 释放表

        mysql -uroot -p123456 -e'unlock tables'

 

在线备份工具percona-xtrabackup

安装

1 yum install -y percona-xtrabackup

 

创建备份文件目录

1 mkdir /mysql_backup

 

备份数据库

# 数据库全备

    innobackupex --user=root --password=123456 /mysql_backup

# 数据库增量备份

    innobackupex --user=root --password=123456 --incremental /mysql_backup --incremental-basedir=/mysql_backup/2018-01-25_18-50-59

# 将增量打包进全备文件

    innobackupex --apply-log --redo-only /mysql_backup/2018-01-25_18-44-35

    innobackupex --apply-log --redo-only /mysql_backup/2018-01-25_18-44-35 --incremental-dir=/mysql_backup/2018-01-25_18-50-59

    innobackupex --copy-back /mysql_backup/2018-01-25_18-44-35/

 

posted @ 2018-01-25 18:38  前路~  阅读(222)  评论(0编辑  收藏  举报