前期准备
准备两台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)