zoukankan      html  css  js  c++  java
  • mysql主从复制

    mysql 主从复制

    基本命令:

    • 启动mysql,这里使用的是yum下载,所以使用systemctl管理

      systemctl start mariadb
      
    • 远程连接mysql服务端

      mysql -uroot -p -h 192.168.11.11
      参数解释: -u  用户
      		-p  密码,可先不输入,回车后输入, 
      		-h  服务端地址
      
    • 修改mysql密码

      set password = PASSWORD('新密码');
      
    • 创建mysql用户

      create user yuncong@'%' identified by 'yuncong123';
      # 新建用户 yuncong@任意地址可连,密码yuncong123
      
    • 查询mysql库中的用户信息

      # 进入mysql库
      use mysql;
      
      # 查询语句
      select host,user, password from user;
      
    • 授权语句

      # 语法
      grant 权限 on 数据库.表名 to 账户@主机名       对特定数据库中的特定表授权
      grant 权限 on 数据库.* to 账户@主机名         对特定数据库中的所有表给与授权
      grant 权限1,权限2,权限3 on *.* to 账户@主机名      对所有库中的所有表给与多个授权
      
      # 权限分类:
      查询,插入,更新,新增
      select ,insert,update, create
      
      #yuncong用户对所有数据库中文件有任何操作
      grant all privileges  on *.*  to "yuncong"@'%';
      
    • 移除权限

      revoke all privileges on *.* from yuncong@"%";
      
    • 详情请创建用户和授权请看:https://www.cnblogs.com/yuncong/articles/10122719.html

    数据库备份与恢复

    • 使用mysqldump进行数据备份

      mysqldump -u root -p --all-databases > /tmp/db.dump
      

      使用scp将数据发送到需要用的设备中

    • 数据导入

      # 登录需要导入的数据库之后
      source /tmp/db.dump
      

      或者

      mysql -uroot - < /tmp/db.dump
      

      基于mysqldump实现逻辑备份查看该博客https://www.cnblogs.com/yuncong/articles/10122695.html#autoid-1-0-0

    mysql主从复制

    • 前言

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

    • mysql数据库特点

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

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

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

      img

    • mysql主从复制优点:

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

      利用复制功能当master服务器出现问题时,我们可以从人工的切换到从服务器继续提供服务,此时服务器的数据和宕机时数据几乎是完全一致的.

      复制功能也可以用做数据本分,但是如果人为IDE执行drop,delete等语句删除,那么从库的备份功能也就失效了

    • 主从机制实现原理

      img

      (1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events); 
      (2) slave将master的binary log events拷贝到它的中继日志(relay log); 
      (3) slave重做中继日志中的事件,将改变反映它自己的数据。
      

    主从复制步骤

    主库操作
    1. 在master主库上操作,开启主库功能

      # 先将mariadb服务端关闭
      systemctl stop mariadb 
      
      # 编辑/etc/my.cnf写入以下信息
      [mysqld]
      server-id=10
      log-bin=qishi-logbin
      
      # 保存退出
      启动mariadb服务端
      systemctl start mariadb 
      
      
    2. 在主库创建用户,用户同步数据

      create user yuanqing@'%' identified by 'yq666';
      

      授予普通用户, slave的身份

      grant replication slave on *.* to 'yuanqing'@'%';
      
    3. 登录mysql,锁定数据库的库表,禁止写入

      # 锁定数据库
      flush table with read lock;
      
      查看主库的状态,记录下,日志文件的名字和位置
      show master status; 
      
    4. 退出mysql,导出主库的数据

      mysqldump -u root -p --all-databases > /opt/db.dump   
      # 这里的路径要自己知道在哪
      
    5. 远程传输主库的数据,给从库,进行导入

      scp /opt/db.dump   root@192.168.11.167:/opt/
      
    6. 解锁主库的锁,写入数据,查看从库是否同步

      unlock tables;
      
    从库操作
    1. 关闭该从库的数据库

      systemctl stop mariadb
      
      # 查看进程确认
      ps -ef |grep mysql
      
    2. 在从库的 /etc/my.cnf中添加参数,添加只读参数

      vim /etc/my.cnf
      # 添加文本
      
      [mysqld]
      server-id=3
      read-only=true
      
    3. 重启数据库

      systemctl restart mariadb
      
    4. 导入主库传过来的数据

      mysql -uroot -p  <  /opt/db.dump 
      
      # 或者登录mysql,使用source 
      source /opt/db.dump
      
    5. 登录mysql,,输入命令开启主从之间的复制关系

      change master to master_host='192.168.11.96',
      master_user='yuanqing',
      master_password='yq666',
      master_log_file='qishi-logbin.000001',
      master_log_pos=871;
      
      
      # host 是主的地址,   master是主的用户, password为密码,   log_file是主库查询的日志,和pos
      
    6. 开启slave同步功能

      start slave;
      
    7. 检查slave机器的主从是否正确

      show slave statusG  #查看主从同步是否正确
      
    8. 确认查询结果中的下列参数是否是yes,即主从复制正确

        Relay_Master_Log_File: qishi-logbin.000001
                   Slave_IO_Running: Yes
                  Slave_SQL_Running: Yes
      
    主库操作

    注意:

    ​ 此时mariadb数据库,请退出root用户,使用普通用户配置,因为root身份权限太大,无法达到read-only效果

    ​ 此时mariadb数据库,请退出root用户,使用普通用户配置,因为root身份权限太大,无法达到read-only效果

    1. 登录普通用户

      mysql -uyuanqing -p 
      
    2. 此时在主库写入数据,查看从库是否正确同步

    3. 从库无法写入数据,即为正常

  • 相关阅读:
    sqlserver获取当前id的前一条数据和后一条数据
    C#实现测量程序运行时间及cpu使用时间
    类库dll引用不成功问题
    合并相同字段
    Android之来历
    XML and JSON 验证
    特殊符号
    git 使用
    格式化字符串:金额
    grunt + sass 使用记录
  • 原文地址:https://www.cnblogs.com/yuncong/p/10293572.html
Copyright © 2011-2022 走看看