美文网首页
mysql主从同步

mysql主从同步

作者: w_dll | 来源:发表于2020-01-05 11:33 被阅读0次

    主从同步大体的原理是:主服务器(master)进行的操作将会被记录在Binary日志文件中,从服务器(slave)创建一个IO线程把Binary日志文件中的数据写入自身Relay日志文件中。因此主服务器需要开启Binary日志文件,从服务器需要开启Relay日志文件,主服务器中的MySQL每次操作都会记录到Binary日志文件中。
    用之前的一台docker搭建的mysql服务器作为主服务,另外重新再准备一台服务器搭建mysql来做同步。

    准备

    现准备一台服务器,安装mysql服务
    下载安装

    rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
    yum repolist enabled | grep "mysql.*-community.*"
    yum install mysql-community-server
    service mysqld start
    

    修改密码

    #修改配置文件
    vi /etc/my.cnf
    [mysqld]
    skip-grant-tables
    #退出
    service mysqld retstart
    mysql -uroot
    mysql>use mysql;
    mysql>update user set password = password('new password') where user='root';
    mysql>flush privileges;
    mysql>exit;
    sed -i '/skip-grant-tables/d' /etc/my.cnf
    service mysqld restart
    

    docker中mysql(master)配置

    进入容器

    #docker_mysql是容器名称
    docker exec -it docker_mysql bash
    #容器内安装vim
    apt-get update
    apt-get upgrade
    apt-get install vim
    

    修改配置文件

    cd /etc/mysql
    vim my.cnf
    #添加如下配置
    [mysqld]
    ## 同一局域网内注意要唯一
    server-id=100  
    ## 开启二进制日志功能,可以随便取(关键)
    log-bin=mysql-bin
    #配置完成后需要重启
    service mysql restart
    #重启容器
    exit
    docker start docker-mysql
    

    创建用于同步的用户'slave',并给予REPLICATION SLAVE、REPLICATION CLIENT同步权限

    docker exec -it docker_mysql bash;
    mysql -uroot -p'password'
    mysql>CREATE USER 'slave'@'%' IDENTIFIED BY 'password';
    mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    mysql> flush privileges;
    

    服务器中mysql(slave)配置

    /etc/my.cnf增加配置如下

    [mysqld]
    ## 设置server_id,注意要唯一
    server-id=101  
    ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
    log-bin=mysql-slave-bin   
    ## relay_log配置中继日志
    relay_log=edu-mysql-relay-bin  
    

    链接master和slave

    进入mysql(master),执行show master status;

    001.PNG
    进入mysql(slave),执行
    change master to master_host='149.28.28.145', master_user='slave', master_password='password', master_port=3306,master_log_file='mysql-bin.000001', master_log_pos=769, master_connect_retry=30;
    

    master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
    master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
    master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
    查询slave状态,正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。

    mysql>show slave status;
    
    002.PNG
    开启slave,再次查询SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。
    mysql>start slave;
    mysql>show slave status;
    
    003.PNG
    此时主从同步已开启,可以进行测试,在master中创建一个数据库,再检查slave中是否存在该数据库
    master
    master.PNG
    slave
    slave.PNG

    参考链接

    链接1

    相关文章

      网友评论

          本文标题:mysql主从同步

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