共计 7995 个字符,预计需要花费 20 分钟才能阅读完成。
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 |
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142565.htm
正文完
星哥玩云-微信公众号
