MySql 主从复制

⒈主从复制的使用场景mysql

  1.数据自动备份,实现数据库拓展,增强数据的安全性。sql

  2.提高数据库的负载性能,读写分离,主写数据,从读数据,减轻主的压力。docker

⒉实现原理数据库

  MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其做为master,它的数据库中全部操做都会以“事件”的方式记录在二进制日志中,其余数据库做为slave经过一个I/O线程与主服务器保持通讯,并监控master的二进制日志文件的变化,若是发现master二进制日志文件发生变化,则会把变化复制到本身的中继日志中,而后slave的一个SQL线程会把相关的“事件”执行到本身的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。vim

⒊MySql主从配置的前提条件安全

  一、服务器版本一致服务器

  二、主服务器日志必须二进制ide

  三、主服务器-从服务器库的数据要求一致性能

  四、从数据库不能作写操做spa

⒋实现流程

  1.配置主服务器MySql

    ①修改MySql my.cnf文件,添加如下内容

[mysqld]

server-id=1  #设置server-id
log-bin=mysql-bin  #开启二进制日志并定义binlog的前缀名
    *我使用的是Docker镜像,执行如下操做
docker cp 6e246d8fdb51:/etc/mysql/my.cnf /fanqi/mysql/conf
docker cp my.cnf 6e246d8fdb51:/etc/mysql/my.cnf

    *Linux的MySql,执行如下操做

vim /etc/mysql/my.cnf

    ②在MySql数据库中,创建用于同步数据库的帐号

create user 'repl'@'%' identified with 'mysql_native_password' by '123456';  -- 建立用户
GRANT replication slave ON *.* TO 'repl'@'%';  -- 分配权限
GRANT ALL privileges ON *.* TO 'repl'@'%';  -- 分配权限
flush privileges;	-- 刷新MySQL的系统权限相关表

    ③重启MySql服务

    *我使用的是Docker镜像,执行如下操做

docker restart 6e246d8fdb51

    *Linux的MySql,执行如下操做

systemctl restart mysqld.service

    ④查看MySql主服务器日志

show master status
show master status\G(都可)

*记录下File和Position的值,一下子在从服务器上配置时须要使用。 

 

    ⑤为了同步前数据一致,锁定表

1 flush tables with read lock;

   *完成主从配置后,应尽快解除表的锁定

1 unlock tables;

 

  2.配置从服务器MySql

    ①修改MySql my.cnf文件,添加如下内容

  [mysqld]

  server-id=2
  log-bin=mysql-bin

    ②重启MySql服务

    ③执行如下命令

1 stop slave;
2 change master to master_host='192.168.204.128', master_user='repl', master_password='123456', master_log_file='mysql-bin.000002', master_log_pos=1171;
3 start slave;
4 show slave status;

  输入命令:show slave status后若是slave_io_running和slave_sql_running都为yes,那么代表能够成功同步了 

  若是slave_io_running为no,那么多是如下缘由:

  (1)、你的主从MySql是拷贝的,安装的UUID是同样的。  

docker cp 6e246d8fdb51:/var/lib/mysql/auto.cnf /fanqi/mysql/conf 
docker cp auto.cnf 6e246d8fdb51:/var/lib/mysql/auto.cnf

  (2)、防火墙拦截

systemctl  stop firewalld

  (3)、没有关闭SeLinux,临时关闭SeLinux看是否可行

setenforce 0

  (4)、配置信息不正确,检查Sql中的用户名密码、master_log_file等配置信息是否正确。

 

master开启二进制日志后默认记录全部库全部表的操做,能够经过配置来指定只记录指定的数据库甚至指定的表的操做,具体在mysql配置文件的[mysqld]可添加修改以下选项:

复制代码
# 不一样步哪些数据库  
binlog-ignore-db = mysql  
binlog-ignore-db = test  
binlog-ignore-db = information_schema  
  
# 只同步哪些数据库,除此以外,其余不一样步  
binlog-do-db = game  
复制代码
相关文章
相关标签/搜索