• Linux MySQL集群搭建之主从复制


    前期准备

      准备两台Linux,一主,一从,具体Linux安装MySQL操作步骤:点我直达

    集群搭建

    注意事项

    • 一主可以多从
    • 一从只能一主
    • Linux之间要能ping通!!

    关闭主从机器的防火墙策略

    chkconfig iptables off
    
    service iptables stop

    主服务器配置

    修改my.cnf文件

    vim /etc/my.cnf
    
    [mysqld]
    # 启用二进制日志
    log-bin=mysql-bin
    # 服务器唯一ID,一般取IP地址最后一段
    server-id=200

    重启mysql服务

    service mysqld restart

    主机给从机授备份权限slave(登陆到MySQL

    GRANT REPLICATION SLAVE ON *.* TO '从机MySQL用户名'@'从机ip' identified by '从机MySQL密码';
    
    一般不用root账户,'%'表示所有客户端都能连,只要账户,密码都正确,此处可以用具体客户端IP代替,加强安全

    刷新权限

    FLUSH PRIVILEGES

    查询master状态

    show master status;

    从服务器配置

    修改my.cnf文件

    vim /etc/my.cnf

    [mysqld]
    # 服务器唯一ID,一般取IP地址最后一段
    server-id=201

    重启并登陆到MySQL进行配置从服务器

    change master to master_host='192.168.31.200',master_user='root',master_password='root',master_log_file='mysql-bin.000002',master_log_pos=594;

      注意语句中间不要断开,master_port为mysql服务器端口号(无单引号),master_user为执行同步操作的数据库账户,此处的594就是:show master status中看到的position的值,mysql-bin.000002就是file的值

    重启从服务器复制功能

    start slave;

    检查从服务器赋值功能状态 

    show slave status G

      注意:Slave_IO_Running: Yes、Slave_SQL_Running: Yes必须都为yes才代表成功!!

      搞定!!!

    主从复制演示

    主:192.168.31.200;从:192.168.31.201

    注意事项

      如果linux中一台配置好mysql的话,克隆出第二台的话,要将auto.cnf删除,二台mysql的uuid不能相同!!!,要不然主从复制出问题

    设置从服务器只读模式

    常见现象

      在我们搭建好主从服务器后,会发现一个问题,主服务器上的数据,可以同步给从服务器;但是在从服务器中添加数据时,不会同步至主服务器,这样子会造成一些垃圾数据,此时我们需要将从库设置为只读模式。

    解决方法

    演示如下:
    mysql> set global read_only=1; 
    Query OK, 0 rows affected (0.00 sec)

    #set global read_only=0 为取消普通账号的只读模式

    授权普通MySQL测试账号
    mysql> grant select,insert,update,delete on s18.* to 'test'@'127.0.0.1' identifi
    ed by '123456';
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    用测试账号登陆进行删除等操作,会提示--read-only错误
    mysql> delete from student where sid=14;
    ERROR 1290 (HY000): The MySQL server is running with the --read-only option so i
    t cannot execute this statement
    
    mysql> insert class values(5,三年级十班);
    ERROR 1290 (HY000): The MySQL server is running with the --read-only option so i
    t cannot execute this statement

    注意:set global read_only=1 对拥有super权限的账号是不生效的,所以在授权账号的时候尽量避免添加super权限

    那么我们在做数据迁移的时候不想发生任何数据的修改,包括super权限修改也要限制。

    可以用锁表:

    mysql> flush tables with read lock;
    Query OK, 0 rows affected (0.18 sec)
    使用root账号测试:
    mysql>  delete from student where sid=13;
    ERROR 1223 (HY000): Can't execute the query because you have a conflicting read
    lock
    解锁测试:
    mysql> unlock tables;
    Query OK, 0 rows affected (0.00 sec)
    mysql>  delete from student where sid=13;
    Query OK, 0 rows affected (0.00 sec)
  • 相关阅读:
    MySQL全面瓦解20:可编程性之流程控制语句
    MySQL全面瓦解19:游标相关
    MySQL全面瓦解18:自定义函数
    MySQL全面瓦解17:触发器相关
    MySQL全面瓦解16:存储过程相关
    MySQL全面瓦解15:视图
    MySQL全面瓦解14:事务
    MySQL全面瓦解13:系统函数相关
    MySQL全面瓦解12:连接查询的原理和应用
    MySQL全面瓦解11:子查询和组合查询
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/13154225.html
Copyright © 2020-2023  润新知