美文网首页
Mysql 主从复制

Mysql 主从复制

作者: 杰杰微电 | 来源:发表于2018-08-02 15:12 被阅读0次

    主从复制工作原理

    Master : 对数据有改变的语句操作(insert,drop,update,delete,create,alter)会写到Binary log 里面

    Slave: slave服务器所有的数据都是来源于Master

    Slave怎么同步?

    I/O thread : 读取主服务器上Binary log (有变化的), 将读过来的二进制内容写到 Relay log 里面

    SQL thread: 监测relay log ,从Relay log 里面的语句读出来,处理 replay (重放)操作,在slave 上操作

    主从复制二进制日志类型

    Binlog_format = statement

    每一条修改数据的SQL 语句都会被记录到Master 端的bin-log 中,

    slave 端在复制的时候SQL线程会解析成和原来的Master 端执行过的

    相同的SQL语句再次执行

    优点: 日志记录量少

    缺点: 有可能数据不一致 (比如计算时间的函数的SQL语句,拿到从服务器来执行就会造成数据不一致)

    Binlog_format = row  (官网推荐)

    日志中记录每一行数据被修改的形式,然后在slave 端执行相同的数据修改

    优点:避免数据不一致

    缺点:日志量急据扩大(比如一次性update 10 万条记录),某些情况下还会使用statement

    Binlog_format = mixed

    根据具体SQL 语句来选择日志的记录形成

    Master 主服务器配置 (MySQL 5.7.10)

    vim /etc/my.cnf

    [mysqld]

    log_bin=master-bin

    binlog_format=row

    server_id=11

    datadir=/var/lib/mysql                     //数据库文件的路径,可根据实际情况修改

    socket=/var/lib/mysql/mysql.sock

    character_set_server=utf8

    max_connections=2000

    log_timestamps=SYSTEM

    symbolic-links=0

    log-error=/var/log/mysqld.log

    pid-file=/var/run/mysqld/mysqld.pid

    root@WEB-01 mysql]  systemctl restart mysqld

    查看初始化是否成功

    ls /var/lib/mysql          // 查看目录下面是否有数据库的目录(mysql 目录,sys 目录)生成

    如果初始化没成功,rm -rf /var/lib/mysql/*  , 重新初始化。

    mysql -uroot -p

    mysql>grant replication slave on *.* to 'repuser'@'slaveip' identified by 'Xsjy%123';

    mysql>flush privileges;

    mysql>select user,host from mysql.user;            //查看授权用户

    mysql>show grants for repuser@'slaveip';          //查看授权用户情况

    mysql>show master status\G

    *******************************************************************************************

    从服务器配置

    [mysqld]

    log_bin=slave-bin

    binlog_format=row

    relay_log=relay_bin

    server_id=12

    datadir=/var/lib/mysql

    socket=/var/lib/mysql/mysql.sock

    character_set_server=utf8

    max_connections=2000

    log_timestamps=SYSTEM

    symbolic-links=0

    log-error=/var/log/mysqld.log

    pid-file=/var/run/mysqld/mysqld.pid

    root@WEB-01 mysql]  systemctl restart mysqld       // 初始化启动从数据库

    mysql -u root 登录mysql

    // 设定主服务器的相关信息

    mysql>change master to master_host='10.25.190.201',master_user='repuser',master_password='Xsjy%123',master_log_file='master-bin.000001',master_log_pos=1048,master_port=3306;

    master_host : 主服务IP

    master_user:  主服务器允许复制的用户名

    master_password: 密码

    master_log_file : 当前日志文件的名称  在主服务器上用 show master status\G 查看相关信息

    master_log_pos : 当前日志文件的位置

    mysql>start slave;

    mysql>show slave status\G

    查看这两个进程是否yes

    Slave_IO_Running: yes

    Slave_SQL_Running: yes

    相关文章

      网友评论

          本文标题:Mysql 主从复制

          本文链接:https://www.haomeiwen.com/subject/gitsvftx.html