美文网首页
MySQL 主从复制

MySQL 主从复制

作者: 陈小陌丿 | 来源:发表于2017-02-08 10:12 被阅读0次

    进入 mysql 创建用户

    CREATE USER 'slave'@'%' IDENTIFIED BY 'flzx3qc1001'
    

    查看用户信息

    select * from mysql.user where user='slave' \G
    

    设置权限

    GRANT SELECT,REPLICATION SLAVE ON *.* TO 'slave'@'%'; 
    

    查权限是否设置成功

    select * from mysql.user where user='slave' \G
    

    复制两个虚拟机

    因为我是在虚拟机操作 所以只要复制就可以

    同源策略,将主库的库文件复制到从库

    注意,先要停止Mysql服务,主库从库都要停止。

    service mysql stop
    

    库位置/var/lib/mysql,mysql文件夹就是这个所有的库,需要把这个文件夹复制到从库。现将这个文件进行压缩。

    tar -zcvf mysql.tar.gz ./mysql/
    

    首先进入从库,查看从库是否有了这个压缩文件,并进行移动到从库的/var/lib/

    cd /tmp/
    mv mysql.tar.gz /var/lib/
    

    将从库mysql文件夹进行备份,以防失败。

    cd /var/lib/
    mv mysql mysql.bak
    

    将主库传过来的mysql.tar.gz 解压,这就完成了同源策略

    tar -zxvf mysql.tar.gz
    

    这时,就可以主从就都可以开启mysql服务了。

    service mysql start
    

    配置主库和从库

    主库配置/etc/mysql/mysql.conf.d/mysqld.cnf

    [mysqld] 
    server-id               = 1  
    log_bin                 = /var/log/mysql/mysql-bin.log
    expire_logs_days        = 10
    max_binlog_size         = 100M
    binlog-ignore-db=mysql   //不进行主从复制的库
    # 将bind-address注释,为了能够使用从库服务器IP登陆主库
    #bind-address           = 127.0.0.1
    

    从库配置/etc/mysql/mysql.conf.d/mysqld.cnf

    [mysqld] 
    server-id               = 2
    log_bin                 = /var/log/mysql/mysql-bin.log
    expire_logs_days        = 10
    max_binlog_size         = 100M
    binlog-ignore-db=mysql
    

    修改完后重启数据库

    service mysql restart
    

    查询主数据库状态

    mysql> show master status;
    
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 |      154 |              | mysql            |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    

    ** 如果为空说明 数据库没重启。。 **

    从库执行命令

    CHANGE MASTER TO 
        MASTER_HOST='192.168.20.14',
        MASTER_USER='slave', 
        MASTER_PASSWORD='flzx3qc1001',
        MASTER_LOG_FILE='mysql-bin.000001',
        MASTER_LOG_POS=154;
    
    //CHANGE MASTER TO MASTER_HOST='192.168.20.14', MASTER_USER='slave', MASTER_PASSWORD='flzx3qc1001', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
    
    

    参数解析

    MASTER_HOST:主服务器IP
    MASTER_USER:在主服务器中创建的帐号,slave
    MASTER_PASSWORD:自己定义的密码,    flzx3qc1001
    MASTER_LOG_FILE:上一步查看的 主服务器的FILE文件,mysql-bin.000001
    MASTER_LOG_POS:上一步查看的    主服务器的Postion位置,笔者是154
    

    开始同步 从服务器执行

    START SLAVE;
    

    停止复制

    STOP SLAVE;
    

    查看状态

    SHOW SLAVE STATUS \G
    

    发现有一个错误

    Last_IO_Errno: 1593
    Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
    

    意思是 主的UUID 和 从的UUID 不可以一样, 就是复制虚拟机的原因。。。

    删除 从服务器的 UUID配置

    文件地址 /var/lib/mysql/auto.cnf

    # 切换目录
    cd /var/lib/mysql
    
    # 重命名
    mv auto.cnf auto.cnf.back
    
    # 重启服务
    service mysql restart
    
    # 进入mysql 后 查看状态
    SHOW SLAVE STATUS \G
    
    Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
    Master_Retry_Count: 86400
    
    

    相关文章

      网友评论

          本文标题:MySQL 主从复制

          本文链接:https://www.haomeiwen.com/subject/jpjvittx.html