我们在搭建网站的时候,对于数据库的操作是非常重要的一部分,当一台服务器的负载过高的时候,我

们则需要把 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