• 数据库管理


    数据库管理

    安装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 statusG;
    
    # 记录下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 statusG;

    数据库备份

    使用备份工具

    # 创建测试数据库,表,记录
    
        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/
  • 相关阅读:
    leetcode-滑动窗口
    leetcode刷题-双指针
    nlp
    机器学习
    tf-idf算法
    RNN和LSTM的理解
    DDD落地实践-战术实现心得
    DDD落地实践-战略设计心得
    测试平台系列(66) 数据驱动之基础Model
    Python小知识之对象的比较
  • 原文地址:https://www.cnblogs.com/cq146637/p/8352658.html
Copyright © 2020-2023  润新知