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

    配置思路
    1. 修改master和slave的配置文件,使用二进制日志,指定serverid
    目的是让各自都有了自己的唯一标示,并以二进制文件格式进行交流
    2. master中创建授权用户,查看二进制日志文件名,及最新位置
    让slave知道用哪个用户信息访问master,知道读取哪个日志文件,及从哪儿开始读
    3. slave中使用被授权用户信息及日志文件信息,进行指向master
    这时已经建立了和master的联系,明确了从哪儿读取日志文件
    3. 执行启动slave的命令,开始主从复制,并查看复制状态信息
    准备条件
    停止对master数据库的操作
    把master中的数据库全部导入到slave,使两边数据库完全一致
    配置步骤
    1. 修改配置文件 my.cnf

    vi /etc/my.cnf

    master:
    [mysqld]
    log-bin=mysql-bin //[必须]启用二进制日志
    server-id=222 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
    slave:
    [mysqld]
    log-bin=mysql-bin 
    server-id=226 

    2. 重新启动两台服务器的mysql
    3. master创建授权用户
    登陆主服务器mysql命令行,创建一个用于从服务器复制的用户

    CREATE USER '***'@'192.168.2.113' IDENTIFIED BY '******';
    GRANT REPLICATION SLAVE ON *.* TO '***'@'192.168.2.113';

    "*.*"表示对所有库的所有操作,“%”表示所有客户端都可能连,也可用具体客户端IP代替,如192.168.145.226,加强安全
    4. 查看master状态
    登陆主服务器mysql命令行
    mysql>show master status;

    mysql-bin.000001 是用于主从复制的文件名
    619 是日志文件内的最新位置

    5. slave指向master
    登陆从服务器mysql命令行,使用之前创建的用户和master的日志文件及其位置

    CHANGE MASTER TO
    MASTER_HOST='192.168.2.113',
    MASTER_USER='root',
    MASTER_PASSWORD='*****',
    MASTER_LOG_FILE='mysql-bin.000004',
    MASTER_LOG_POS=154;

    6.启动slave
    mysql>start slave;

    7. 查看slave状态
    mysql> show slave statusG;
    结果中有两个重要数据项:
    常见的问题是SQL线程没有正常工作 Slave_SQL_Running: No
    通常是两边的数据库不是完全对应的,需要确保master上的库及到目前为止的最新记录都复制到slave上了

    8.

    在“Slave_SQL_Running_State”中出现了“Fatal error: The slave I/O thread stopsbecause master and slave have equal MySQL server UUIDs; these UUIDs must bedifferent for replication to work.”这个错误。

    当时以为是主节点服务器的UUID和从节点服务器网卡的UUID重复了,经过查看,发现他们并没有重复,然后重启服务器以后发现仍然没有成功。有点摸不着头脑,所以通过上网搜索。

    发现原来是Mysql的一个配置文件auto.cnf里面记录了mysql服务器的uuid。

    vi /var/lib/mysql/auto.cnf

    server_uuid:服务器身份ID。在第一次启动Mysql时,会自动生成一个server_uuid并写入到数据目录下auto.cnf文件里。

    原来是这个uuid和主服务器的uuid重复了。(从节点服务器上的mysql安装包是直接从主节点服务器里面拷过来的),然后经过修改auto.cnf文件中的server-uuid,重启mysql服务器,再查看mysql从节点的状态,终于成功了。

    9.测试
    当IO线程和SQL线程都正常后,到master中随意测试下插入、修改、删除操作,同时到slave中检查

    1) Slave_IO_Running: Yes

    IO线程状态,必须YES

    2) Slave_SQL_Running: Yes

    SQL线程状态,必须YES

  • 相关阅读:
    装修后才知道的79件事,无数网友砸出来的经验(转)
    FusionCharts参数说明
    学习好文章
    好文
    oracle删除同一张表的重复记录
    2012的到来,2011年总结
    近期计划
    #¥(#)@()¥。。。。。。。
    疯狂的一周
    可怜的鱼儿
  • 原文地址:https://www.cnblogs.com/huangjianping/p/8060374.html
Copyright © 2011-2022 走看看