有不少公司的网站存在大量的并发访问,通常的解决方式就是利用MySQL主从配置,实现读写分离,减轻数据库压力,今天就记录一下,这几回搭建主从的一些心得mysql
什么是MySQL主从复制
简单来讲就是保证主SQL(Master)和从SQL(Slave)的数据是一致性的,向Master插入数据后,Slave会自动从Master把修改的数据同步过来(有必定的延迟),经过这种方式来保证数据的一致性,就是主从复制sql
- 第一步固然是安装MySQL,数据库版本要一致,减小出现不可预支的问题
- 配置Master主服务器
在Master MySQL上建立一个用户“slave”,并容许其余Slave服务器能够经过远程访问Master,经过该用户读取二进制日志,实现数据同步。数据库
mysql>create user slave; //建立新用户vim
//repl用户必须具备REPLICATION SLAVE权限,除此以外没有必要添加没必要要的权限,密码为mysql。说明一下192.168.0.%,这个配置是指明repl用户所在服务器,这里%是通配符,表示192.168.0.0-192.168.0.255的Server均可以以repl用户登录主服务器。固然你也能够指定固定Ip。centos
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.0.%' IDENTIFIED BY 'mysql';服务器
刷新一下权限 flush privileges;并发
找到MySQL安装文件夹修改my.ini文件。mysql中有好几种日志方式,这不是今天的重点。咱们只要启动二进制日志log-bin就ok。网站
在[mysqld]下面增长下面几行代码spa
server-id=1 #给数据库服务的惟一标识,通常为你们设置服务器Ip的末尾号,若是从数据库也设置这个参数的话,必定不能相同,随便给个数字就能够了rest
log-bin=master-bin
log-bin-index=master-bin.index #开启二进制日志功能,能够随便取,最好有含义(关键就是这里了)
## 复制过滤:须要备份的数据库,输出binlog
#binlog-do-db=roncoo
## 复制过滤:不须要备份的数据库,不输出(mysql库通常不一样步)
binlog-ignore-db=mysql
查看日志
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000008 | 120 | | | |
+------------------+----------+--------------+------------------+-------------------+
重启MySQL服务
4. Slave从服务器(centos)
(1)找到MySQL安装文件夹修改my.cnf文件,vim my.cnf
server-id= 101 #不可跟其余主从数据库相同
log-bin=edu-mysql-slave1-bin # 开启二进制日志功能,以备Slave做为其它Slave的Master时使用
relay-log=mysql-relay-bin #relay_log配置中继日志
log-slave-updates=1
read-only=1 #设定以后就是只读数据库了,只有super权限的用户能够读写
replicate-wild-do-table=db.% #过滤掉不须要同步的数据库,只同步db数据库,这个最好在从库过滤
slave-skip-errors = 1133 #同步过程当中忽略的错误码
(2) 重启数据库 service mysql restart;
(3)链接Master
change master to master_host='192.168.0.?', //指定主服务器IP地址
master_port=3306,
master_user='slave', //指定在主服务器上能够进行同步的用户名
master_password='mysql', //指定在主服务器上能够进行同步的用户名的密码
master_log_file='master-bin.000001', //Master服务器产生的日志,必须跟主数据库的file字段一致
master_log_pos=0 //必须跟主数据库的Position一致
(4)启动Slave
start slave;
查看状态 show slave status;
mysql 1236错误