一、为什么要使用数据库主从架构
一个网站损耗资源最厉害的就是数据库,最易崩溃的也是数据库,而数据库崩溃带来的后果是非常严重的。数据库分为读和写操作,在实际的应用中,读操作的损耗远比写操作多太多,因此读操作是引起数据库崩溃的主因,所以我们把数据分为主从库,主库负责写操作,从库负责读操作。
二、数据库主从配置-主机
复制数据表至从库,保证两个数据库之间的数据表完全一致。
编辑配置文件my.cnf
#在mysld下面加入如下行
server-id=106#一般根据IP最后一位
log-bin=mysql-bin #主机必须打开,从库就是根据bin的二进制文件来读取主库操作记录
binlog-do-db=test #需要备份的数据库名,如果需要备份多个数据库,重复设置这个选项即可
binlog-ignore-db=mysql #不需要备份的数据库名,如果需要备份多个数据库,重复设置这个选项即可
log-slave-updates #这个参数一定要加上,否则不会给更新的记录到二进制文件里
slave-skip-errors #是跳过错误,继续执行复制操作
重启数据库 service mysqld restart
显示主库信息 show master status
6.建立用户
grant replication slave on *.* to slave@'192.168.1.%' identified by '123456';
可在从机上做连接测试 mysql -h 主库IP -u root -p
7.锁主库表(可省略,主要防止在写从库配置时,主表被改动)
flush tables with read lock;
三、数据库主从配置-从机
1.编辑配置文件my.cnf
#在mysld下面加入如下行
server-id=103#一般根据IP最后一位
log-bin=mysql-bin
master-host=192.168.1.106#主机IP
master-user=slave #连接用户
master-password=123456#密码
master-port=3306#端口
replicate-do-db=test #需要备份的数据库
replicate-ignore-db=mysql #忽略的数据库
master-connect-retry=60#如果从服务器发现主服务器断掉,重新连接的时间差
log-slave-updates #这个参数一定要加上,否则不会给更新的记录到二进制文件里
slave-skip-errors #是跳过错误,继续执行复制操作
2.重启数据库service mysqld restart
3.查看slave状态 show slave status (注:slave_IO_Running 以及 slave_SQL_Running 两列的值都是Yes,表明slave的IO以及sq线程都在运行)
4.解锁主库表(若之前没有锁主库表,可忽略,在主机完成)
unlock tables
至此,主从库搭建完成,可在主库插入数据进行测试
常见错误:
如果发现slave_IO_Running以及slave_SQL_Running的值为No,在从机上执行如下操作
slave stop #关闭从库
reset slave #重设从库
change master to master_host='主机IP',master_user='slave',master_password='123123',master_port='3306',master_log_file='mysql-bin.000012',master_log_pos='327';
slave start;
show slave status;
ps:在主服务器中,主要是以写数据为主,建议使用InnoDB数据引擎 ,在从服务器中,建议使用MyISAM数据引擎。