一、导言
在实际生产中,数据的重要性不言而喻。所以考虑到数据的重要性,比如单点故障导致后端数据库崩溃,或者后端数据库访问压力过大,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
为了测试这两个数据是否可以同步,可以将数据插入主库中,并检查它是否存在于从库中。注意:从库只能读,不能写
三。实战:主不同步时,如何同步数据到一致
说明:当主服务器已经运行了一段时间,数据量很大的时候,需要备份主服务器,然后从从服务器恢复,从备份的位置开始复制。
1.对主服务器上的数据进行完整备份。
[root@centos6 ~]# mysqldump --lock-all-tables --all-databases --flush-logs --master-data=2 >/root/all.sql2.从从属服务器导入主服务上的完全备份,并在导入过程中关闭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]>
总结:本次实战有两个关键步骤:①主服务器锁表进行完整备份,并滚动日志;②从服务器的中途恢复。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)