我们在搭建网站的时候,对于数据库的操作是非常重要的一部分,当一台服务器的负载过高的时候,我
们则需要把 mysql 数据库放到另外一台机器上面来减轻服务器的压力,这里我们就要用到 mysql 的主从以
及 msyql 读写分离架构,那么我们先来看看 mysql 主从的原理以及操作步骤。
mysql主从原理:当搭建完一个 mysql 主从架构之后,mysql 主机上的数据内容一旦发生变化(进行了
任何操作),就会将这个变化记录到日志 二进制日志bin_log 里,然后将这个日志送到 mysql 从机
上,从机一旦接受到这个日志,又会将这个日志变成自己的bin_log,接着进行记录,之后根据这个日志
的记录来改变自己的数据,这样就做到了主从数据的一致。
A -- change database --> bin_log -transfer-> B -- repl_log --> change database
可以应用在读写分离的场景中,用以降低单台MySQL服务器的I/O
可以实现MySQL服务的HA集群
可以是1主多从,也可以是相互主从(主主)
讲完了原理,下面我们来看看具体的步骤:
1、主机下配置:
1.1、编辑数据库配置文件:vim /etc/my.cnf
在[mysqld]的下面加入代码:
log-bin=mysql-bin
server-id=1 //这里的“1”可以自定义,只要是唯一的就可以
innodb-do-db=db1 //表示只同步该数据库
innodb-ignore-db=db2 //表示忽略同步该数据库,如果不加这两个参数的话,就表示备份
所有的数据库
1.2、修改配置文件之后,重新启动mysql:
/etc/init.d/mysqld restart
1.3、登录mysql服务器:mysql -uroot -p
在主服务器新建一个用户赋予“replication slave”的权限:
-> grant replication slave on *.* to 'repl'@'X.X.X.X' identified by 'password';
//其中“X.X.X.X”为从服务器的ip地址
锁定数据库以防止写入数据
-> flush tables with read lock;
一定要记住前两列的内容,一会会用到 -> show master status;
1.4、退出mysql命令行,导出数据库:
mysqldump -uroot -p --default-character-set=utf8 --all-databases > /data/all.sql
1.5、将数据库备份文件传到从服务器:
rsync -avL /data/all.sql 192.168.1.133:/data/mysql/
1.6、解锁数据表:
-> unlock tables;
2、从机下配置:
2.1、登录从服务器
2.2、导入主服务器的数据:
mysql -uroot -p --default-character-set=utf8 < /data/mysql/all.sql
2.3、编辑配置文件my.cnf,在[mysqld]下面加入:
server-id=2
2.4、保存文件并重新启动mysql:
/etc/init.d/mysqld restart
2.5、登录mysql,执行以下命令:
-> stop slave;
-> change master to master_host='X.X.X.X', master_port=3306, master_user='repl',
master_password='password', master_log_file='mysql-bin.000009', master_log_pos=262;
-> start slave;
注意:一定要先把从服务停止,才能执行第二条命令,不然会报错。master_host 是主服务器的ip,
master_port 是主服务器的端口,master_user 是建立数据库时的用户,最后两项是之前要记住的
master 状态的前两列。
2.6、在从上执行命令:
-> show slave status\G;
如果出现两个yes,则说明主从架构配置成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
3、如果我们要配置主服务器的数据库二进制日志的过期时间,可以在配置文件中使用参数来定义:
expire_logs_days = 30