• centos6下mysql的主从复制的配置


    2015年9月17日 23:00:36 update
    想要好好了解mysql复制,还是去看看《高性能MySQL》(第三版)好了,上面说的比较详细。

    ===========
    在本地用virtualbox安装了两台centos6.7服务器,配置了主从复制。两个服务器都配置了第二块网卡(host-only),master的ip为192.168.56.102
    slave的ip为192.168.56.103

    安装

    centos-6.7-minimal.iso

    配置eth0网卡

    默认不能上网!因为没开启eth0

    vi /etc/sysconfig/network-scripts/ifcfg-eth0
    
    ONBOOT=yes #修改!
    MM_Controlled=no #修改!
    BOOTPROTO=dhcp #不修改,就用它!
    ##其他没有列出的行,用默认值,不要动!
    
    /etc/init.d/network restart
    

    添加网卡

    cd /etc/sysconfig/network-scripts
    cp ifcfg-eth0 ifcfg-eth1
    
    vi /etc/udev/rules.d/70-persistent-net.rule #查看eth1的mac地址并复制
    vi ifcfg-eth1
    #修改掉mac地址
    #删除UUID  没有这个UUID一样可以玩!因为我并没有找到好用的寻找到uuid的方法
    

    关selinux

    我就没见这东西好用过!

    vi /etc/selinux/config
    
    SELINUX=disabled #!修改!
    
    reboot #退出vim后,重启才能生效
    

    mysql安装和简单配置

    yum install mysql mysql-devel mysql-server
    chkconfig --add mysqld
    chkconfig mysqld on  #开机自动启动
    service mysqld start
    
    mysql_secure_installation  #安全安装:设定root密码,移除匿名用户,禁用远程登陆,删除测试数据和访问权限,重新加载用户权限表
    

    master配置

    cp /etc/my.cnf /etc/my.cnf.bak  #备份
    vi /etc/my.cnf
    
    #编辑文件内容为:
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    log-bin=mysql-bin  #新增。表示使用二进制日志。前面的datadir则指定了binlog的存放目录
    server-id=102  #新增。用本机ip最后一段,比如192.168.56.102那么使用102
    
    
    /etc/init.d/mysqld restart #重启mysql
    mysql -uroot -ppipe36#    #登陆mysql
    mysql>grant replication slave, replication client on *.* to 'repl'@'192.168.56.103' identified by 'zjmos123567'
    # 设定允许slave服务器使用的master帐号,允许其远程登陆(指定了slave的ip地址),同时设定了用户名和密码
    
    

    接下来,从数据库中导出数据,然后传送给slave服务器,并在slave服务器中导入sql文件。
    为了确保没有数据库插入或者修改操作,要设定lock:

    mysqldump -uroot -ppipe36# --lock-all-tables testDB > testDB.sql  #导出testDB数据库到testDB.sql文件
    
    mysql -u root -p
    
    mysql>show master status; #查看状态!重要! File字段和Position字段给slave用的!
    

    slave配置

    my.cnf中加入server-id

    #[mysqld]下添加两行
    log-bin=mysql-bin #非必须
    server-id=103  #一般取本及机ip最后一段
    

    重启mysql

    service mysqld restart
    

    导入master的sql文件

    注意 master导出的文件可能只是一个数据库的(本例),因此可能sql文件中头部缺少两句:

    create database xxx if not exists;
    use xxx;
    

    那么需要slave登陆mysql后手动输入这两句,以指定数据库名。

    mysql -u root -p
    source testDB.sql
    change master to master_host='192.168.56.102',master_user='repl',master_password='zjmos123567',master_log_file='mysql-bin.000009',master_log_pos=901;
    

    此处,master_user用户是master上创建的用户,master_password和前面master中的配置的要保持一致;master_log_file的值要和master中查询到的master status结果中的File保持一致,master_log_pos则和Position字段保持一致。

    mysql> start slave; #开启slave
    mysql> show slave statusG  #查看slave是否正常工作,主要看`Slave_IO_Running`和`Slave_SQL_Running`
    

    还是不行?

    无语了。slave的Slave_IO_Running项一直显示NO

    发现是防火墙iptable在作怪。master和slave都关掉好了:

    service iptables stop
    chkconfig iptables off
    

    然后重启动mysql服务,终于好了。

    ===

    常见错误和solution

    Error duplicate entry ....

    因为同步出错了。
    在slave上执行:

    stop slave;
    set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
    start slave;
    

    然而,counter设置为1也还是很不靠谱的。

    有时候因为mysql发生了回滚操作,因此要避开的insert失败(错误代码1062)项,有非常多。
    这时候不妨在my.cnf(windows下是my.ini)中进行配置:

    slave-skip-errors = 1062
    

    然后重启mysql服务,再看看mysql主从复制的结果。等复制好了,再把上面这条skip的配置项去掉。毕竟一直skip感觉很不安全啊。。

  • 相关阅读:
    赫尔维茨公式
    从解析几何的角度分析二次型
    Struts 1 Struts 2
    记一次服务器被入侵的调查取证
    契约式设计 契约式编程 Design by contract
    lsblk df
    Linux Find Out Last System Reboot Time and Date Command 登录安全 开关机 记录 帐号审计 历史记录命令条数
    Infrastructure for container projects.
    更新文档 版本控制 多版本并发控制
    Building Microservices: Using an API Gateway
  • 原文地址:https://www.cnblogs.com/zjutzz/p/4799729.html
Copyright © 2020-2023  润新知