mysql 主从

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

们则需要把 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、导入主服务器的数据:


    msyql -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,执行以下命令:


    -> slave stop;


    -> 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;

 
    -> slave start; 


注意:一定要先把从服务停止,才能执行第二条命令,不然会报错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



    


    







你可能感兴趣的:(mysql,服务器,database)