一、为什么要使用数据库主从架构
一个网站损耗资源最厉害的就是数据库,最易崩溃的也是数据库,而数据库崩溃带来的后果是非常严重的。数据库分为读和写操作,在实际的应用中,读操作的损耗远比写操作多太多,因此读操作是引起数据库崩溃的主因,所以我们把数据分为主从库,主库负责写操作,从库负责读操作。
二、数据库主从配置-主机
- 复制数据表至从库,保证两个数据库之间的数据表完全一致。
- 编辑配置文件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数据引擎。