Mysql主从数据库配置说明
前言
为了解决高并发情况下数据库CPU高占用情况,而选择使用主从式构,对数据库进行读写分离,提高数据库性能。以下是我进行配置的过程。
准备环境
至少有2台及以上含mysql的系统,可以采用虚拟机的形式
这里使用两台阿里云抢占式服务器(2核4G 8分钱/小时)用来进行测试很方便。
实现原理
程序通过修改主数据库进行,将操作日志记录到Binary Log(二进制日志)中,从服务器通过I/O线程将Binary Log的操作同步到Relay Log中,然后从服务会将Relay Log日志记录在从服务器执行。
实现步骤
1.修改主服务器my.cnf文件
我的Mysql通过apt直接安装的,通过
vim /etc/mysql/my.cnf
找到my.cnf加载了其他文件,顺藤摸瓜找到核心配置文件**[mysqld]**项
vim /etc/mysql/mysql.conf.d/mysqld.cnf
在[mysqld]下插入
server-id=1
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
2.重启主服务器
/etc/init.d/mysql restart
or
service mysql restart
3.进入主服务器mysql查看一下配置情况
mysql -u username -p
然后
mysql> SHOW MASTER STATUS;
会出现一个master-bin.00000x的文件
4.在从服务器上修改my.cnf配置
server-id=2 //这里一定要和主服务不同,需要一主多从需要全不相同
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
5.重启从服务器mysql
/etc/init.d/mysql restart
或者
service mysql restart
6.关联主从数据
进入主数据库执行
mysql> create user repl;
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从服务器ip' IDENTIFIED BY '用户密码';
mysql> flush privileges;
第一句 创建数据用户
第二句 赋予(从服务器ip下,也可以改成%)repl用户 REPLICATION SLAVE的权限, . 表面这个权限是针对主库的所有表的
第三句 配置立即生效
从数据库执行
mysql> change master to master_host='主服务器IP',master_port=3306,master_user='repl',master_password='用户密码',master_log_file='master-bin.000001',master_log_pos=0;
7.启动主从同步
进入从数据库
启动
mysql> stop slave;
停止
mysql> stop slave;
查看状态
show slave status \G;
注意查看图中标出的位置报错信息(如果有的话)。
如果遇到
“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.”
- 检查my.cnf中server-id的值是否有重复
- 如果没有重复检查主从服务器的/var/lib/mysql/auto.cnf文件中的uuid是否有重复
如果重复时应重命名auto.cnf文件为auth.cnf.bak 然后重启mysql即可
一般就是这两个原因引起的
如果报的是登陆失败,就检查配置用户的密码和权限
8.测试主从结构
在主服务的mysql中创建一个数据库,然后就可以在从数据库中找到。
mysql> create database test001;