主从复制和集群的区别

主从复制和集群的区别,第1张

MySQL主从复制架构及原理

一、导言

在实际生产中,数据的重要性不言而喻。所以考虑到数据的重要性,比如单点故障导致后端数据库崩溃,或者后端数据库访问压力过大,mysql数据库率先缓解后端数据库压力是非常必要的。主服务器负责读写,从服务器只负责读取,保证了数据的可靠性,提高了服务器的高可用性。


MySQL主从复制架构如图所示:


MySQL的主从复制原理:主服务器在二进制日志中记录数据的变化,当主服务器上的数据发生变化时,将变化写入二进制日志。从服务器将检测主二进制日志是否在某个时间间隔发生变化。如果是,则I/OThread请求主二进制事件,同时,主节点为每个I/O线程启动一个转储线程,用于向其发送二进制事件,并将其保存在从节点的本地中继日志中。从节点将启动SQLThread从中继日志中读取二进制日志并在本地重放,这样它的数据与主节点的数据一致。最后,I/OThread和SQL线程将进入睡眠状态,等待下一次唤醒。


二。主从复制配置的实现

要求:

1。双方的mysql版本要一致。如果不一致,只要主节点低于从节点

2.两个节点之间的时间应该同步


配置:

服务器配置如下:

1.修改/etc/my.cnf配置文件

log-bin=/mydata/data/binlogs/master-bin

2.创建这个目录,并将组的所有权修改为mysql

mkdir/mydata/binlogs/

chown-RMySQL.MySQL/mydata/binlogs/

3.授权用户

授予复制从属服务器,在*上的复制客户端。*到'回复用户'@'10.1.10。“%”由“pass”标识;

刷新权限;

从属服务器的配置如下:

1.修改/etc/my.cnf配置文件,注释二进制日志,打开中继日志,修改server-id和主节点之间的不一致

服务器id=11

relay-log=/mydata/relaylogs/relay-bin

2.创建它的目录并授予MySQL作为它的所有者和组

mkdir/mydata/relaylogs/

chown-RMySQL.MySQL/mydata/relaylogs/

3.连接到主服务器

将master改为master_host='10.1.10.1',master_user='repluser',master_password='pass


完成申诉配置过程后,可以分别启动mysql服务器,启动从服务器上的I/O和sql线程,例如startslave


为了测试这两个数据是否可以同步,可以将数据插入主库中,并检查它是否存在于从库中。注意:从库只能读,不能写

[root@centos6 ~]# mysql Welcome to the MariaDB monitor.  Commands end with ; or \g. Your MariaDB connection id is 13 Server version: 5.5.32-MariaDB MariaDB Server Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show slave status\G; *************************** 1. row ***************************                Slave_IO_State: Waiting for master to send event                   Master_Host: 10.1.10.1                   Master_User: repluser                   Master_Port: 3306                 Connect_Retry: 60               Master_Log_File: master-bin.000003           Read_Master_Log_Pos: 326                Relay_Log_File: relay-bin.000007                 Relay_Log_Pos: 611         Relay_Master_Log_File: master-bin.000003              Slave_IO_Running: Yes #确保I/O和SQL线程开启,即可实现数据同步             Slave_SQL_Running: Yes  #确保I/O和SQL线程开启,即可实现数据同步               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: 326               Relay_Log_Space: 1184               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) ERROR: No query specified MariaDB [(none)]> #测试在主库上删除dbs,验证从库是否存在dbs数据库,结果如下: MariaDB [(none)]> show databases; +--------------------+ | Database           | +--------------------+ | information_schema | | dbs                | | hellodb            | | mydbs              | | mysql              | | performance_schema | | test               | +--------------------+ 7 rows in set (0.01 sec) MariaDB [(none)]> show databases; +--------------------+ | Database           | +--------------------+ | information_schema | | hellodb            | | mydbs              | | mysql              | | performance_schema | | test               | +--------------------+ 6 rows in set (0.00 sec) MariaDB [(none)]> [root@centos6 ~]# mysql Welcome to the MariaDB monitor.  Commands end with ; or \g. Your MariaDB connection id is 14 Server version: 5.5.32-MariaDB-log MariaDB Server Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> MariaDB [(none)]> show databases; +--------------------+ | Database           | +--------------------+ | information_schema | | dbs                | | hellodb            | | mydbs              | | mysql              | | performance_schema | | test               | +--------------------+ 7 rows in set (0.02 sec) MariaDB [(none)]> drop database dbs; Query OK, 0 rows affected (0.04 sec) MariaDB [(none)]>



三。实战:主不同步时,如何同步数据到一致

说明:当主服务器已经运行了一段时间,数据量很大的时候,需要备份主服务器,然后从从服务器恢复,从备份的位置开始复制。


1.对主服务器上的数据进行完整备份。

[root@centos6 ~]# mysqldump --lock-all-tables --all-databases --flush-logs --master-data=2 >/root/all.sql

2.从从属服务器导入主服务上的完全备份,并在导入过程中关闭I/O和SQL线程。

[root@centos6 ~]# mysql Welcome to the MariaDB monitor.  Commands end with ; or \g. Your MariaDB connection id is 34 Server version: 5.5.32-MariaDB MariaDB Server Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> source  /root/alren.sql MariaDB [testdbs]> change master to master_host='10.1.10.1',master_user='repluser',master_password='pass',MASTER_LOG_FILE='master-bin.000007',MASTER_LOG_POS=245; Query OK, 0 rows affected (0.02 sec) MariaDB [testdbs]> start slave; Query OK, 0 rows affected (0.02 sec) MariaDB [testdbs]> show slave status\G *************************** 1. row ***************************                Slave_IO_State: Waiting for master to send event                   Master_Host: 10.1.10.1                   Master_User: repluser                   Master_Port: 3306                 Connect_Retry: 60               Master_Log_File: master-bin.000007 #已经恢复到主节点的二进制的位置           Read_Master_Log_Pos: 245                Relay_Log_File: relay-bin.000002                 Relay_Log_Pos: 530         Relay_Master_Log_File: master-bin.000007              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: 245               Relay_Log_Space: 818               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 [testdbs]> show tables; +-------------------+ | Tables_in_testdbs | +-------------------+ | tbl               | +-------------------+ 1 row in set (0.00 sec) MariaDB [testdbs]> select * from tbl; +-------+ | name  | +-------+ | tom   | | jerry | | lucy  | +-------+ 3 rows in set (0.00 sec) MariaDB [testdbs]> use mydbs; Database changed MariaDB [mydbs]> show tables; #测试数据是否和主节点一致 +-----------------+ | Tables_in_mydbs | +-----------------+ | students        | +-----------------+ 1 row in set (0.00 sec) MariaDB [mydbs]> select * from students; +------+-------+ | id   | name  | +------+-------+ |    1 | tom   | |    2 | jerry | +------+-------+ 2 rows in set (0.00 sec) MariaDB [mydbs]>



总结:本次实战有两个关键步骤:①主服务器锁表进行完整备份,并滚动日志;②从服务器的中途恢复。










欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/778277.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存