zoukankan      html  css  js  c++  java
  • maria(mysql)的主从复制

    一.mariadb的基本操作

      1.远程连接

    mysql  -uroot  -p  -h  127.0.0.1
    mysql  -uroot  -p  -h  192.168.226.128

      2.赋予远程连接的权限

    grant all privileges on *.* to root@'%'  identified by 'root'
    
    #赋予所有的权限在所有的库所有的表给root用户在任意ip登录,验证通过密码root

      3.修改root密码

    #用root登录之后
    set password =PASSWORD('hahhaha'

      4.创建mysql用户

    create user tom@'%' identified  by 'hahha';
    flush privileges;

      5.给用户查看所有库所有表权限

    grant select on *.* to tom@'%' indentified by 'haha'

      6.给用户增加其他权限

    grant update,delete,insert on *.* tom@'%' identified by 'haha' 

      7.授予权限的语法

    #mysql使用grant命令对账户进行授权,grant命令常见格式如下:
    
    grant 权限 on 库名.表名 to 账户@主机名    对特定数据库中的特定表授权
    grant 权限 on 库名.* to 账户@主机名       对特定数据库中的所有表给与授权
    grant 权限1,权限2,权限3 on *.* to 账户@主机名  对所有库中的所有表给与多个授权
    grant all privileges on *.* to 账户@主机名    对所有库和所有表授权所有权限

      8.移除权限

    revoke create on *.* from tom@"%" identified by 'haha';
    revoke delete on *.* from tom@"%" identified by 'haha';

      9.查看权限

    show grants for tiger@127.0.0.1;

      10.查询用户信息

    use mysql;
    select host ,user,password from user;

      11.数据库的备份与恢复

    #备份所有
    mysqldump -uroot -p --all-databases >/tmp/db.sql
    
    #备份单个数据库
    mysqldump -u root -p luffycity >/tmp/luffycity.msql

      12.导入数据库

    #方法一
    #登录
    source  /tmp/luffycity.sql
    
    #方法二
    mysql -uroot -p  < /tmp/luffycity.sql
    
    
    #方法三
    navicate

       13.删库

    drop database 库名;

    二 .主从复制 (确保主从的mariadb的数据库版本一致)

      MySQL数据库的主从复制方案,是其自带的功能,并且主从复制并不是复制磁盘上的数据库文件,而是通过binlog日志复制到需要同步的从服务器上。

      MySQL数据库支持单向、双向、链式级联,等不同业务场景的复制。在复制的过程中,一台服务器充当主服务器(Master),接收来自用户的内容更新,而一个或多个其他的服务器充当从服务器(slave),接收来自Master上binlog文件的日志内容,解析出SQL,重新更新到Slave,使得主从服务器数据达到一致。

      主从复制的逻辑有以下几种:

        一主一从,单向主从同步模式,只能在Master端写入数据

        一主多从

      

          双主主复制逻辑架构,此架构可以在Master1或Master2进行数据写入,或者两端同事写入(特殊设置)

      

    在生产环境中,MySQL主从复制都是异步的复制方式,即不是严格的实时复制,但是给用户的体验都是实时的。
    MySQL主从复制集群功能使得MySQL数据库支持大规模高并发读写成为可能,且有效的保护了服务器宕机的数据备份。

    应用场景:

    利用复制功能当Master服务器出现问题时,我们可以人工的切换到从服务器继续提供服务,此时服务器的数据和宕机时的数据几乎完全一致。
    复制功能也可用作数据备份,但是如果人为的执行drop,delete等语句删除,那么从库的备份功能也就失效了.

    主从机制实现原理:

      

    1. 主数据库写入数据之后, 会有data changes(数据变化)记录
    2. 有变化记录之后,将增删改的一些sql语句记录到本地的Binary log(二进制日志)中
    3. 从库会一直开启着一个线程
    4. 通过线程去读取这个二进制日志的内容
    5. 从库会将数据写入到自己的Relay log(中继日志)中
    6. 从库会将中继日志中的操作转化为SQL thread(SQL语句)
    7. 通过转化的SQL语句写入到自己的数据库, 两边的数据就一致了

       1 准备两台机器

    106.12.112.139# 主服务器master(可读可写)
    192.168.226.128   # 从服务器slave(可读)
    实际工作中数据库读取操作比较多,由于从服务器是读,所以从服务器的配置要强悍一些

      2. 两台机器上分别安装mariadb数据库

    106.12.112.139
    用户名: root
    密码: 123
    
    192.168.226.128
    用户名: root
    密码: 123

      配置主库(102.12.112.139)上操作

      3.在主数据库

    停mariadb
    systemctl stop mariadb

      4. 修改主数据库的配置文件

    vim /etc/my.cnf
    添加以下内容
    [mysqld]   # 如果配置文件里面有这一行,就只需要加以下两行配置就可以了
    server-id=1
    log-bin=qishi2-logbin

      

      5. 重启主数据库

    systemctl restart mariadb

      6. 创建主从复制用户账号

    create user 'tom'@'%' identified by 'tom';

      7.给主从库账号授权,说明给tom从库复制的权限,在102.12.112.139机器上复制

    grant replication slave on *.* to 'tom'@'%';

      8. 实现对主数据库锁表只读,防止数据写入,数据复制失败

    flush table with read lock;

       9. 查看并记录主数据库的状态

    show master status;

       

      10. 确认主数据库是否已经成功锁表

      11. 导出主数据库的数据为alldb.sql

    mysqldump -u root -p --all-databases > /opt/alldb.sql

      

      12. 把这个数据库文件拷贝到从数据库的/opt目录下

    scp /opt/alldb.sql 192.168.226.56:/opt/

      配置从数据库(192.168.226.128)

      1.停止从数据库服务

    systemctl stop mariadb

      2.修改从数据库的配置文件

    vim /etc/my.cnf
    添加以下配置
    [mysqld]
    server-id=5
    read-only=true

      

      3.启动从数据库服务

    systmectl start mariadb

      4.在从库上导入主数据库数据

    mysql -u root -p

    source /opt/alldb.sql

      

      5.查看主库的参数

    show master status;

      6.配置复制的参数,Slave从库连接Master主库的配置(最重要的一步)

    change master to master_host='106.12.112.139',
    master_user='tom',
    master_password='tom',
    master_log_file='qishi2-logbin.000004 ',
    master_log_pos=370;

      

      7.启动从库的同步开关,测试主从复制的情况

    satrt slave

      8. 查看从库的状态

    show slave statusG;

       

      主库的后续操作(106.12.112.139)

       1.导出数据完毕,并配置好从库开启主从同步后,再解锁主库,恢复可写;

    unlock tables;

       2.验证主从复制情况

    在主库上创建数据,查看从库数据同步状态
    在主库(102.12.112.139)创建任意数据库 
    create database hahahaha;
    
    #发现从库看不到这个数据库,以内我们只给tom这个账户复制的权限而已 
    #说我再给tom查看的权限

      3. 在主库上给予qihang用户select的权限, 并刷新授权表

    grant select on *.* to tom@"%" identified by "tom";
    flush privileges;

      4. 在从库上登录tom用户, 并尝试创建一个库

    mysql -utom -p  #这边不能加-h了,用本机登录

        

       

       5.验证主从读写分离状态(从库操作)

          从库上提示read-only表示主从同步读写分离已经成功完成

     

  • 相关阅读:
    thinkPHP5.0 获取域名
    tp5 composer在packagist引入验证码
    使用build.php快速搭建前后台
    __construct()和__initialize()
    mysql 如何给SQL添加索引
    mysql如何查看SQL语句的执行时间
    thinkPHP自带的图片批量打包扩展ZipArchive
    sizeof和strlen
    Uboot中汇编指令
    Uboot代码分析
  • 原文地址:https://www.cnblogs.com/tjp40922/p/10739270.html
Copyright © 2011-2022 走看看