• Centos7 mariadb (mysql)主从复制实现


    一.mysql基本命令

    1.启动mysql
    systemctl start mariadb 
    
    2.linux客户端连接自己 
    mysql -uroot -p -h 127.0.0.1
    
    3.远程链接mysql服务端
    mysql -uroot -p -h 192.168.1.209
    远程授权(允许208连接209的数据库):
    grant all privileges on *.* to root@"192.168.1.208" identified by "123";
    flush privileges
    
    4.修改mysql密码
    MariaDB [(none)]> set password = PASSWORD('123');
    
    5.创建mysql用户
    create user zero@'%' identified by '666';
    
    6.查询mysql库中的用户信息
    use mysql;
    select host,user,password from  user;
    
    7.授权语句
    给小春这个用户,授予创建数据库的权限
    
    mysql使用grant命令对账户进行授权,grant命令常见格式如下
    
    grant 权限 on 数据库.表名 to 账户@主机名            对特定数据库中的特定表授权
    grant 权限 on 数据库.* to 账户@主机名              对特定数据库中的所有表给与授权
    grant 权限1,权限2,权限3 on *.* to 账户@主机名      对所有库中的所有表给与多个授权
    grant all privileges on *.* to 账户@主机名      对所有库和所有表授权所有权限
    
    #授予小春创建的权限,对于所有的库表生效
    grant create  on *.* to xiaochun@"%"  identified by 'xc666';
    #授予小春用户,只有创建mymysql数据库的权限
    grant create  on mymysql.* to xiaochun@"%"  identified by 'xc666';
    
    #授予用户最大的权限,所有的权限
    grant all privileges on *.* to username@'%' identified by 'password';
    
    
    8.移除权限
    MariaDB [(none)]> revoke all privileges on *.* from xiaochun@"%" identified by 'xc666';
    
    
    9.数据库的备份与恢复
    #备份
    mysqldump -u root -p --all-databases > /tmp/db.sql
    #数据导入,方式有2种
    source /tmp/db.sql;
    
    第二种
    mysql -uroot -p <  /tmp/db.sql 
    
    
    第三种
    navicat
    
    第四种,如果你数据量特别大的话,使用第三方工具
    xtrabackup
    View Code

    二.mariadb主从复制原理

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

    三.mariadb主从复制实验

    1.环境准备

    主服务器: 192.168.1.209
    从服务器: 192.168.1.208

    2.在主服务器(192.168.1.209)上操作

    (1)停止主服务器mariadb数据库服务

    systemctl stop mariadb
    # 查看是否还存在服务
    ps aux|grep mysqld

    (2) 修改主服务器配置文件

    /etc/my.cnf

    [mysqld]
    server-id=1
    log-bin=209_logbin

    (3)启动mariadb

    systemctl start mariadb

    3.主库(192.168.1.209)添加从库账号

    1.新建用于主从同步的用户hsz,允许登录的从库是'192.168.1.208'

    create user 'hsz'@'%' identified by '666';

    2.题外话:如果提示密码太简单不复合策略加在前面加这句

    mysql> set global validate_password_policy=0;

    3.给从库账号授权,说明给hsz从库复制的权限,在192.168.1.208机器上复制

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

    4.检查主库创建的复制账号

    select user,host from mysql.user;

    检查授权账号的权限

    show grants for hsz@'%';

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

    flush table with read lock;

    6.检查主库的状态, 并记录下日志文件的名字,和位置 MariaDB [(none)]> show master status;

    记录下主数据库的写入状态和日志文件的名字

    >show master status;

    7.锁表后,导出数据库的所有数据,

    mysqldump -uroot -p --all-databases > /data/all.sql 

    8.确保数据导出后,没有数据插入,完毕再查看主库状态

    show master status;

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

    unlock tables;

    10.将备份导出的数据scp至Slave(从库服务器)数据库

    scp /data/all.sql root@192.168.1.208:/data/

     

    4.在从库上配置

    (1)关闭数据库服务

    systemctl stop mariadb

    (2)在从库192.168.1.208上打开/etc/my.cnf

    [mysqld]
    server-id=3
    read-only=true
    # 加上read-only参数表示从库只读不写入

    (3)开启数据库

    systemctl start mariadb

    (4)导入主库传过来的数据库文件,保持从库的数据与主库一致

    mysql -u root -p
    source /data/all.sql 

    (5)配置复制的参数,Slave从库连接Master主库的配置

    对应上面主库配置

    mysql > change master to master_host='192.168.1.209',
    master_user='hsz',
    master_password='666',
    master_log_file='209_logbin.000001',
    master_log_pos=471;

    (6)启动从库的同步开关,测试主从复制的情况

    start slave;

    (7)查看复制状态

    show slave statusG;

    注意: 如果看到Slave_IO_Running和Slave_SQL_Running这两个参数都为yes, 说明主从同步配置成功,否则需要检查并重新配置

    最后在主库上操作:

    (8)解锁主库的写入

    unlock tables;

    (9)如果从库上面的普通用户无法在从库上登录,就重新创建一个用户

    create user 'hsz'@'%' identified by '666'; 

    # 可以先查看下从库是否已经存在,如果存在就不要创建

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

    或者在主库上给hsz授权, 只能授于查看的权限

    grant select on *.* to hsz@"%" identified by "666";

    4.测试数据:

    (1)主库上插入数据

    insert into tb1(id,name) values(4,'four');

    (2)从库上查看数据

    select * from tb1;

    数据已经同步

    注意Slave_SQL_Running: No 或Slave_IO_Running: No问题

     

    解决方法

    (1)先到主库查看主库状态

    MariaDB [test]> show master statusG

    如下:

    MariaDB [test]> show master statusG
    *************************** 1. row ***************************
                File: 209_logbin.000001
            Position: 940
        Binlog_Do_DB: 
    Binlog_Ignore_DB: 
    1 row in set (0.00 sec)

    (2)获取file 和 Position 参数,然后再从库mysql上运行下面命令:

    首先关闭从库:

    slave stop;

    change master to master_host='192.168.1.209',
    master_user='hsz',
    master_password='666',
    master_log_file='209_logbin.000001',
    master_log_pos=940;

    重新开启从库:

    slave start;

  • 相关阅读:
    博客园注册成功,博客开张啦!
    Android零基础开发专题三:Android SDK帮助文档使用方法
    Android平台介绍
    Android零基础开发专题五:Activity、BroadcastReceiver、Service、Content Provider
    Android零基础开发专题四:Android 项目文件结构
    Android零基础开发专题二:Hello Android,I am coming!
    与大家分享一下我的面试经历,也算对自己的一次总结。大家有什么心得,意见都可以畅所欲言。
    分布式安装sde、oracle后,其它机器如何通过arcsde连接oracle?
    【SQLSERVER】存儲過程的寫法格式規格
    利用SQLServer复制功能实现与Oracle数据库同步(转)
  • 原文地址:https://www.cnblogs.com/hszstudypy/p/11561626.html
Copyright © 2020-2023  润新知