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)
原文地址:https://www.cnblogs.com/chenyanbin/p/13154225.html