• mysql主从复制笔记


    一:测试环境介绍

           主从复制测试环境是ubuntu+mysql5.7,master服务器ip是192.168.71.135,slave服务器ip是192.168.71.137,ubuntu环境是从一台已配置好环境的服务器克隆的。

    二:mysql主从配置

    1:)  master配置

    a 在mysql 目录下(/etc/mysql),mysql.cnf文件中添加server-id和Log-bin.主从服务器的server-id不能相同

    log-bin=mysql-bin

    server-id=100

    设置好后,使用show master status;查询一下状态

    设置从服务器连接的账号,密码等

    配置连接用户

    GRANT REPLICATION SLAVE ON *.* to 'mysql账号'@'%' identified by '密码';这里是测试,没有指定从服务器的ip.如需指定ip,执行下面一个指令

    GRANT REPLICATION SLAVE ON *.* to 'mysql账号'@'192.168.71.137' identified by '密码';

    配置好后记录重启mysql.

    2:)配置从数据库

    2.1  Slave的配置与master类似(配置文件名称:mysql.cnf,在/etc/mysql目录,你的环境可能不是该目录),你配置完成后仍然需要重启slaveMySQL。配置参数如下:
    log_bin= mysql-bin
    server_id= 110
    relay_log=mysql-relay-bin
    log_slave_updates=1
    read_only=1
    server_id是必须的,而且唯一。slave没有必要开启二进制日志,但是在一些情况下,必须设置,例如,如果slave为其它slavemaster,必须设置bin_log。在这里,我们开启了二进制日志,而且显示的命名(默认名称为hostname,但是,如果hostname改变则会出现问题)
    relay_log配置中继日志,log_slave_updates表示slave将复制事件写进自己的二进制日志(后面会看到它的用处)
    有些人开启了slave的二进制日志,却没有设置log_slave_updates,然后查看slave的数据是否改变,这是一种错误的配置。所以,尽量使用read_only,它防止改变数据(除了特殊的线程)。但是,read_only并是很实用,特别是那些需要在slave上创建表的应用。

    2.2  配置完成后重新启动mysql

    /etc/init.d/mysql restart

    2.3   执行同步SQL语句

    mysql> change master to
    master_host=’192.168.71.135’,
    master_user=’syncuser’,
    master_password=’123456’,
    master_log_file=’mysql-bin.000001’, -- 该值来源于主库,执行show master status 后的File字段
    master_log_pos=443;-- 该值来源于主库,执行show master status 后的position字段

    2.4 查询从库状态

    start slave;

    show slave statusG

     三:主库SQL测试

    主库创建数据库:

    Create database copytest;

    创建表:

    Create table tu (uid bigint primary key);

    添加一条数据

    Insert into tu (1);

    现在我们来看从数据库:

    从图中可以看到,主库的数据,已经复制到了从库。

    五:总结问题

    1:执行同步语句,出错

    mysql> change master to
    master_host=’192.168.71.135’,
    master_user=’syncuser’,
    master_password=’123456’,
    master_log_file=’mysql-bin.000001’,
    master_log_pos=443;

    出现如下错误:

    Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.

    解决办法:

    删除slave的mysql库的表

    drop table slave_master_info;
    drop table slave_relay_log_info;
    drop table slave_worker_info;
    drop table innodb_index_stats;
    drop table innodb_table_stats;

    重新启动slave数据库:/etc/init.d/mysql restart;

    2:配置好的,slave执行show slave statusG语句后,slave_io_running: no显示no

    slave_io_running: yes才能正常复制,为no时无法复制,可以看到有一个错误,

    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.

    意思是master和slave的uuid重复了,用show variables like '%server_uuid%'查询出uuid,明显两台机子的uuid一样,所以出现了上面的错误.

    因为主从的utunbu环境是克隆的,所以出现了这个问题,我们进入mysql的data 目录,修改auto.cnf文件,通过show variables like '%datadir%'查询出data目录。

    用vim auto.cnf修改auto.cnf文件即可.

  • 相关阅读:
    微信小程序 登录
    小程序验证码输入框 连续输入 自动跳到下一个input
    微信小程序支付方法
    判断屏幕是否过大 或国小 进行 缩放达到自适应
    reactnative 启动
    第二届中国云计算应用论坛圆满闭幕 北达软
    什么是EA? 北达软
    第二届中国云计算应用论坛2012.01.08北京大学隆重揭幕 北达软
    北达软主办的企业架构与数据规划培训圆满结束 北达软
    北达软主办的“第九期中国EA沙龙”圆满举行 北达软
  • 原文地址:https://www.cnblogs.com/cq-jiang/p/7630056.html
Copyright © 2020-2023  润新知