MySQL主从复制架构及实现

MySQL主从复制架构及实现 1、原理:

复制功能及作用:

数据分布 负载均衡:进行读操作的负载均衡,适用于读密集型的应用 可以用于备份 高可用和故障切换 MySQL的升级测试

主从复制:

从服务器:     IO线程:从master请求二进制日志信息,并保存至中继日志;     SQL线程:从relay log中读取日志信息,在本地完成重放; 主节点:     dump Thread:为每个Slave的I/O Thread启动一个dump线程,用于向其发送binary log events; 特点:     异步模式:async         1、从服务器落后于主服务器         2、主从数据不一致现象比较常见 复制架构:     M/S主从,M/M主主,环状复制     一主多从:     从服务器还可以再有从服务器 二进制日志的事件记录格式:SET datetime = now()     1、基于行 ROW     2、基于语句  STATEMENT     3、混合    MIXED 2、配置过程: 主从 master     (1)启动二进制日志;         [mysqld]配置文件中添加         log-bin=master-bin     (2)设置一个当前群集中唯一的server-id;         [mysqld]配置文件中添加         server_id=#     (3)创建一个有复制权限的账号(REPLICATION SLAVE,REPLICATION CLIENT);         GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'HOST' IDENTIFIED BY 'replpass';     进程:binlog dump slave     (1)启用中继日志;         [mysqld]配置文件中添加         relay_log=relay-log         relay_log_index=relay-log.index     (2)设置一个在当前集群中的唯一的server-id;         [mysqld]配置文件中添加         server_id=#     (3)使用有复制权限用户账号连接至主服务器,并启动复制线程;     进程:IO thread,SQL thread 实验: 架构  主服务器地址192.168.150.137   从服务器地址192.168.159.138 两台mariadb均通过yum安装,版本相同mariadb-5.5.52-1.el7.x86_64 主节点  1、修改配置文档,添加参数 vim /etc/my.cnf 在[mysqld]中添加如下几行 log-bin=master-bin server-id=1 innodb_file_per_table=ON skip_name_resolve=ON 2、开启数据库,查看状态信息 MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%log%'; log_bin                                   | ON  MariaDB [(none)]> SHOW MASTER LOGS; +-------------------+-----------+ | Log_name          | File_size | +-------------------+-----------+ | master-bin.000001 |     30379 | | master-bin.000002 |   1038814 | | master-bin.000003 |       245 | +-------------------+-----------+ 3 rows in set (0.00 sec) MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%server%'; +----------------------+-------------------+ | Variable_name        | Value             | +----------------------+-------------------+ | character_set_server | latin1            | | collation_server     | latin1_swedish_ci | | server_id            | 1                 | +----------------------+-------------------+ 3 rows in set (0.00 sec)    3、授权账号 MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser' @ 192.168.%.%' IDENTIFIED BY 'replpass'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) 从节点 1、修改配置文档,添加参数 vim /etc/my.cnf 在[mysqld]中添加如下几行 relay-log=relay-log relay-log-index=relay-log.index server-id=2 innodb_file_per_table=ON skip_name_resolve=ON 2、开启数据库,查看状态 MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%log%'; | relay_log                                 | relay-log                                                                                                 || relay_log_index                           | relay-log.index        3、从节点指定主节点,要注意bin日志和position,信息来自于主节点SHOW MASTER LOGS CHANGE MASTER TO MASTER_HOST='192.168.150.137',MASTER_USER='repluser',MA STER_PASSWORD='replpass',MASTER_LOG_FILE='master-bin.000003',MASTER_LOG_POS=245; 4、通过目录查看从节点状态,此时bin log已指定完成,Slave_IO_Running和Slave_SQL_Running进程还没有开启 MariaDB [(none)]> SHOW SLAVE STATUS\G *************************** 1. row ***************************                Slave_IO_State:                    Master_Host: 192.168.150.137                   Master_User: repluser                   Master_Port: 3306                 Connect_Retry: 60               Master_Log_File: master-bin.000003           Read_Master_Log_Pos: 245                Relay_Log_File: relay-log.000001                 Relay_Log_Pos: 4         Relay_Master_Log_File: master-bin.000003              Slave_IO_Running: No             Slave_SQL_Running: No               Replicate_Do_DB:            Replicate_Ignore_DB:             Replicate_Do_Table:         Replicate_Ignore_Table:        Replicate_Wild_Do_Table:    Replicate_Wild_Ignore_Table:                     Last_Errno: 0                    Last_Error:                   Skip_Counter: 0           Exec_Master_Log_Pos: 245               Relay_Log_Space: 245               Until_Condition: None                Until_Log_File:                  Until_Log_Pos: 0            Master_SSL_Allowed: No            Master_SSL_CA_File:             Master_SSL_CA_Path:                Master_SSL_Cert:              Master_SSL_Cipher:                 Master_SSL_Key:          Seconds_Behind_Master: NULL Master_SSL_Verify_Server_Cert: No                 Last_IO_Errno: 0                 Last_IO_Error:                 Last_SQL_Errno: 0                Last_SQL_Error:    Replicate_Ignore_Server_Ids:               Master_Server_Id: 0 1 row in set (0.00 sec) 5、开启SLAVE进程,此时IO进程和SQL进程均为YES状态 MariaDB [(none)]> START SLAVE; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> SHOW SLAVE STATUS\G *************************** 1. row ***************************                Slave_IO_State: Waiting for master to send event                   Master_Host: 192.168.150.137                   Master_User: repluser                   Master_Port: 3306                 Connect_Retry: 60               Master_Log_File: master-bin.000003           Read_Master_Log_Pos: 497                Relay_Log_File: relay-log.000002                 Relay_Log_Pos: 782         Relay_Master_Log_File: master-bin.000003              Slave_IO_Running: Yes             Slave_SQL_Running: Yes               Replicate_Do_DB:            Replicate_Ignore_DB:             Replicate_Do_Table:         Replicate_Ignore_Table:        Replicate_Wild_Do_Table:    Replicate_Wild_Ignore_Table:                     Last_Errno: 0                    Last_Error:                   Skip_Counter: 0           Exec_Master_Log_Pos: 497               Relay_Log_Space: 1070               Until_Condition: None                Until_Log_File:                  Until_Log_Pos: 0            Master_SSL_Allowed: No            Master_SSL_CA_File:             Master_SSL_CA_Path:                Master_SSL_Cert:              Master_SSL_Cipher:                 Master_SSL_Key:          Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No                 Last_IO_Errno: 0                 Last_IO_Error:                 Last_SQL_Errno: 0                Last_SQL_Error:    Replicate_Ignore_Server_Ids:               Master_Server_Id: 1 1 row in set (0.00 sec) 功能验证: 主节点进行测试库创建 MariaDB [(none)]> CREATE DATABASE mydb; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database           | +--------------------+ | information_schema | | mydb               | | mysql              | | performance_schema | | test               | +--------------------+ 5 rows in set (0.00 sec) MariaDB [(none)]> SHOW MASTER LOGS; +-------------------+-----------+ | Log_name          | File_size | +-------------------+-----------+ | master-bin.000001 |     30379 | | master-bin.000002 |   1038814 | | master-bin.000003 |       580 | +-------------------+-----------+ 3 rows in set (0.00 sec) 从库进行同步验证:mydb库已经过来,状态信息中bin log也应用过来了 MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database           | +--------------------+ | information_schema | | mydb               | | mysql              | | performance_schema | | test               | +--------------------+ 5 rows in set (0.00 sec) [(none)]> SHOW SLAVE STATUS\G *************************** 1. row ***************************                Slave_IO_State: Waiting for master to send event                   Master_Host: 192.168.150.137                   Master_User: repluser                   Master_Port: 3306                 Connect_Retry: 60               Master_Log_File: master-bin.000003           Read_Master_Log_Pos: 580                Relay_Log_File: relay-log.000002                 Relay_Log_Pos: 865         Relay_Master_Log_File: master-bin.000003              Slave_IO_Running: Yes             Slave_SQL_Running: Yes               Replicate_Do_DB:            Replicate_Ignore_DB:             Replicate_Do_Table:         Replicate_Ignore_Table:        Replicate_Wild_Do_Table:    Replicate_Wild_Ignore_Table:                     Last_Errno: 0                    Last_Error:                   Skip_Counter: 0           Exec_Master_Log_Pos: 580               Relay_Log_Space: 1153               Until_Condition: None                Until_Log_File:                  Until_Log_Pos: 0            Master_SSL_Allowed: No            Master_SSL_CA_File:             Master_SSL_CA_Path:                Master_SSL_Cert:              Master_SSL_Cipher:                 Master_SSL_Key:          Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No                 Last_IO_Errno: 0                 Last_IO_Error:                 Last_SQL_Errno: 0                Last_SQL_Error:    Replicate_Ignore_Server_Ids:               Master_Server_Id: 1 1 row in set (0.00 sec) 另:从库的数据文件夹中会记录一些信息,master.info会记录我连的主库的地址,bin log信息等 [root@localhost ~]# ls /var/lib/mysql/ aria_log.00000001  ib_logfile0  mydb        performance_schema  relay-log.index aria_log_control   ib_logfile1  mysql       relay-log.000001    relay-log.info ibdata1            master.info  mysql.sock  relay-log.000002    test [root@localhost ~]# cd /var/lib/mysql/ [root@localhost mysql]# file master.info  master.info: ASCII text [root@localhost mysql]# cat master.info  18 master-bin.000003 581 192.168.150.137 repluser replpass 3306 60 0

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/f59e6391b677621df5bd404e5f5d03eb.html