美文网首页
CentOS7.2 mysql 主从复制

CentOS7.2 mysql 主从复制

作者: 説詩 | 来源:发表于2019-01-31 12:07 被阅读0次

    1. 关闭selinuxs和防火墙

    以下针对两台服务器同时操作

    chkconfig selinux off   #关闭开机启动
    setenforce 0    #关闭selinux
    vim /etc/selinux/config #编辑配置文件
    SELINUX=disabled 修改这一行
    centos6关闭防火墙:
    chkconfig iptables off  #关闭防火墙的开机启动
    service iptables stop   #关闭防火墙
    centos7 关闭防火墙:
    关闭: systemctl stop firewalld
    开机禁用  : systemctl disable firewalld
    查看状态: systemctl status firewalld 
    getenforce  #检测是否关闭
    

    2. 修改主服务器的配置

    vim /etc/my.cnf
    

    修改如下行

    log-bin=mysql-bin   #要开启
    server-id=5 #建议改成服务器ip地址的后一位
    

    3. 修改从服务器的配置

    vim /etc/my.cnf
    

    修改如下行

    server-id=12    #建议改成服务器ip地址的后一位
    

    4. 重启两台mysql服务

    service mysql restart
    

    5. 数据库结构一致

    mysql -uroot -p #连接两台服务器的mysql,进行相同的操作。
    
    create database tabledemo;
    use tabledemo;
    create table user (id int primary key  auto_increment, username varchar(30))engine=innodb default charset=utf8;
    exit;
    

    6. 在主数据库上面设置一个专门用来访问权限(同步权限)的账户。

    mysql -uroot -p #连接主服务器的数据库
    CREATE USER 'phy'@'0.0.0.0' IDENTIFIED BY '123456';
    grant replication slave on *.* to 'phy'@'%' identified by '123456';
    
    show master status;  #查看主服务器状态  mysql-bin.000013 |      628
    mysql-bin.000013 |      628  #要记住,配置从数据库用,重启后会改变
    

    7. 配置从服务器

    mysql -uroot -p #连接从服务器
    ? change master to;
    CHANGE MASTER TO
    MASTER_HOST='master2.example.com',
    MASTER_USER='replication',
    MASTER_PASSWORD='bigs3cret',
    MASTER_PORT=3306,
    MASTER_LOG_FILE='master2-bin.001',
    MASTER_LOG_POS=4,
    MASTER_CONNECT_RETRY=10;
    
    执行下面命令
    change master to
        -> master_host='192.168.134.131', #步骤6主数据库对应的服务器ip
        -> master_user='phy',
        -> master_password='123456',
        -> master_log_file='mysql-bin.000013', #步骤6主数据库对应的值
        -> master_log_pos=628; #步骤6主数据库对应的值
    
    start slave; #开启从服务器
    show slave status \G;    #查看状态
    
    #能看到下面这两行就表示成功
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    #成功
    
    指定某个数据库需要这么做
    master端:
    vim /etc/my.cnf
    binlog-do-db= testdemo  #二进制需要同步的数据库名
    binlog-ignore-db=mysql  #避免同步 mysql 用户配置,以免不必要的麻烦
    
    slave端:
    vim /etc/my.cnf
    replicate_do_db=testdemo         #(do这个就是直接指定的意思)  
    replicate_ignore_db=mysql
    

    然后重启mysql

    service mysqld restart
    

    分别检查看是否相同

     show master status;    #查看主服务器状态  mysql-bin.000014 |    107(此时已经变了)
    show slave status \G;   #查看状态(正常情况重启后也会变)
    

    若不同:

    1.进入主服务器mysql命令模式,查看主服务器指针位置,输入show master status\G;  查看File:mysql-bin.000002    Position:94111504
    
    2.进入从服务器mysql命令模式,输入
    slave stop; #关闭mysql里的slave功能。
    
    3.输入 change master to master_log_file='mysql-bin.000002',master_log_pos=94111504;  #手动调整指针位置
    slave start; #然后再开启
    
    4.最后再输入show slave status\G;  如果  Slave_IO_Running: Yes  Slave_SQL_Running: Yes  则表示同步正常。
    

    8.插入数据测试同步

    Master:

    mysql -p
    
    use tabledemo;
    insert into user values('','testuser1');
    insert into user values('','testuser2');
    

    Slave:

    mysql -p
    
    use tabledemo;
    select * from tabledemo;
    

    9. 解决主键冲突的问题

    在丛库上,执行以下命令,跳过它:

    #先停止slave:
    stop slave;
    set global sql_slave_skip_counter = 1 
    #再启动slave:
    start slave;
    说明:执行一次后查看是否正常,不正常再继续执行该命令
    
    #或者在从库的my.cnf中加上这条:
    slave-skip-errors = 1062
    

    相关文章

      网友评论

          本文标题:CentOS7.2 mysql 主从复制

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