MySQL主从复制认识及实施操做

  • MySQL主从复制做用
    1)、什么是MySQL主从复制
    MySQL主从复制是指数据能够从一个MySQL数据库服务器主节点复制到一个或多个MySQL数据库从节点。MySQL默认采用异步复制方式,这样从节点不用一直访问主服务器来更新本身的数据,数据的更新能够在远程链接上进行,从节点能够复制主数据库中的全部数据库或者特定的数据库。MySQL5.7版开始支持并行复制(MTS),做为一新特性,所以主从复制延迟问题将获得极大的改进。
    2)、MySQL主从复制做用
    1、数据热备
    做为备数据库,当主数据库服务器发生故障后,可切换到从数据库继续工做,避免数据丢失。
    2、读写分离
    可支持MySQL数据库服务器支持更大的并发。数据读写操做可分配在不一样的服务器间进行。如操做报表中尤为重要,因为部分报表SQL语句很是的慢,会致使锁表,影响前台服务。使用主从复制,前台使用master,负责写,报表使用slave,负责读,那么报表SQL将不会形成前台锁表,保证了前台正常运行。
    3、架构扩展
    随着业务量愈来愈大,I/O访问频率太高,单机可能没法知足。此时作多库的存储,如一主多从方式,以下降磁盘I/O访问,提升单个机器的I/O性能。
  • MySQL主从复制原理
    MySQL数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其做为master节点,数据库中全部操做都会以“事件”的方式记录在二进制日志中,其余数据库做为slave经过一个I/O线程与主服务器保持通讯,并监控master的二进制日志文件的变化,如发现master二进制日志文件发生变化,则会把变化复制到本身的中继日志中,而后slave的一个SQL线程会把相关的“事件”执行到本身的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。
    MySQL主从复制认识及实施操做
    总结以下:
    1)、master将操做语句记录到binlog日志中,而后授予slave远程链接的权限(master上建立受权的用户,开启binlog二进制日志功能;一般为了数据安全考虑,slave也开启binlog功能)。
    2)、slave开启两个线程:IO线程和SQL线程。IO线程负责读取master的binlog内容到中继日志relay log里;SQL线程负责从relay log日志里读出binlog内容,并更新到slave的数据库里,这样就能保证slave数据和master数据保持一致了。
    3)、Mysql主从复制至少须要两个Mysql服务,固然Mysql服务能够分布在不一样的服务器上,也能够在一台服务器上启动多个MySQL服务。
    4)、Mysql主从复制最好确保master和slave服务器上的Mysql版本相同。
  • MySQL主从形式
    常见的主从形式:
    一主一从
    MySQL主从复制认识及实施操做
    一主两从、一主多从
    MySQL主从复制认识及实施操做
    联级复制
    MySQL主从复制认识及实施操做
  • MySQL主从复制操做
    操做环境
    OS:CentOS7.6
    Mysql:Mysql5.7
    主库:IP=10.20.1.18
    从库:IP=10.20.1.19
    主从形式:一主一从
    实现MySQL主从复制须要进行的配置:
    主服务器
    开启二进制日志
    配置惟一的server-id
    得到master二进制日志文件名及位置
    建立一个用于slave和master通讯的用户帐号
    从服务器
    配置惟一的server-id
    使用master分配的用户帐号读取master二进制日志
    启用slave服务
    具体操做:
    主服务器操做
    1)、修改主数据库服务器配置文件my.cnf,修改以下信息:
    server_id = 1                #惟一标识,主库从库不能重复
    log_bin = mysql-bin          #开启日志
    binlog_format=MIXED         #日志记录的格式
    max_binlog_size = 512M     #单个日志文件最大
    expire_logs_day = 7          #日志有效期(天)
    binlog_do_db = test1,test2     #日志记录那些数据库
    binlog_ignore_db = mysql,performance_schema,information_schema   #日志记录忽略那些数据库

    MySQL主从复制认识及实施操做
    MySQL服务重启:mysql

    systemctl restart mysqld.service

    2)、建立用于同步帐户sql

    mysql> CREATE USER 'user'@'10.20.1.18' IDENTIFIED BY 'passwd';    #建立用户
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'rsync_user'@'10.20.1.1%' identified by 'passwd';  #分配权限
    mysql>flush privileges;

    3)、查看master状态
    show master status命令记录二进制文件名(mysql-bin.000009)和position位置(1354)。
    MySQL主从复制认识及实施操做
    其中“Binlog_Do_DB ”字段显示记录日志要同步的库,“Binlog_Ignore_DB”字段显示忽略记录日志,无需同步的库。
    4)、查看master的logbin开启状态数据库

    show variables like 'log_bin';

    MySQL主从复制认识及实施操做
    从服务器操做
    1)、修改从数据库服务器配置文件my.cnf安全

    server-id=2   #惟一标识,与主库不同
    relay-log-index=slave-relay-bin.index
    relay-log=slave-relay-bin   #打开slave的relaylog功能的

    MySQL主从复制认识及实施操做
    MySQL服务重启:服务器

    systemctl restart mysqld.service

    2)、设置同步信息
    先中止同步架构

    mysql>stop slave;

    设置同步信息并发

    CHANGE MASTER TO
     MASTER_HOST='10.20.1.18',
     MASTER_USER='rsync_user',
     MASTER_PASSWORD='passwd',
     MASTER_LOG_FILE='mysql-bin.000009',
     MASTER_LOG_POS=754;

    其中master_log_file 和 master_log_pos为上面主库show master status命令记录的信息。
    3)、启动slave 同步进程异步

    mysql>start slave;

    4)、slave状态查看
    show slave status\G 命令查看,主要查看这几项:ide

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    Master_Log_File: mysql-bin.000009
    Relay_Master_Log_File: mysql-bin.000009
    Read_Master_Log_Pos: 1654
    Exec_master_log_pos: 1654

    MySQL主从复制认识及实施操做
    只有【Slave_IO_Running】和【Slave_SQL_Running】都是Yes,则同步正常。
    No或者Connecting都不行,可查看mysql-error.log,以排查问题。性能

    show variables like 'log_error%';

    MySQL主从复制认识及实施操做
    5)、同步测试
    验证操做,如在master的新建一test数据库,新建一张表中插入一条数据,在slave的test库的相同数据表中查看是否有新增的数据,便可验证主从复制功能是否有效,还能够关闭slave(mysql>stop slave;),而后再修改master,看slave是否也相应修改(中止slave后,master的修改不会同步到slave),就可完成MySQL主从复制功能的验证了。
    主库插入数据:
    MySQL主从复制认识及实施操做
    从库查看:
    MySQL主从复制认识及实施操做验证主从数据同步成功。

相关文章
相关标签/搜索