主从复制是指将一个数据库服务器的数据通过网络连接到其他几个数据库服务器,然后在这些服务器上创建一个和主服务器数据完全相同的拷贝。当主服务器中的数据发生改变时,这些改变会异步地传播到其他从服务器上,从而实现主从服务器之间的数据同步。本篇文章给大家介绍如何实现数据库的主从同步。
主从同步基本原理
1、主服务器记录二进制日志(binlog),将所有对数据的修改(包括更新、删除、插入等)都记录在二进制日志中。
2、从服务器建立到主服务器的连接,并请求复制主服务器的二进制日志。主服务器收到请求后开始将新产生的二进制日志发送给从服务器。
3、从服务器读取主服务器的二进制日志,并解析其中的SQL语句;将这些SQL语句在自身执行,保持与主服务器数据的一致性。
在这整个过程中,主服务器产生的数据更改通过其提交给的二进制日志,被从服务器获取并解析成 SQL 语句来同步到每个从服务器的数据库中。从而达到了主库与备库的数据同步,实现高可用的应用服务。
实现流程
1、修改配置文件
主从都需要修改,主的server_id最小
1. [root@DB01 ~]# cat /etc/my.cnf.d/server.cnf 2. ...... 3. [mysqld] 4. log_bin=mysql-bin 5. binlog_ignore_db=mysql 6. server_id=1 7. ...... 8. 9. [root@DB02 ~]# cat /etc/my.cnf.d/server.cnf 10. ...... 11. [mysqld] 12. log_bin=mysql-bin 13. binlog_ignore_db=mysql 14. server_id=2 15. ......
2、将主数据库数据发送给从数据库
172.16.1.52为从数据库内网服务器
1. [root@DB01 ~]# mysqldump -uroot --all-databases > all.sql 2. [root@DB01 ~]# ls 3. all.sql 4. [root@DB01 ~]# scp all.sql 172.16.1.52:/root/ 5. 6. [root@DB02 ~]# mysql -uroot < all.sql
3、重启数据库
1. [root@DB01 ~]# systemctl restart mariadb 2. [root@DB02 ~]# systemctl restart mariadb
4、主数据库进行如下配置
注意密码替换,172.16.1.52为从数据库内网服务器
1. mysql -uroot -pxxx -e "grant all privileges on *.* to ls@'%' identified by 'sss';" 2. #xxx为数据库密码,sss为全局用户密码 3. mysql -uroot -pxxx -e "grant replication slave on *.* to 'user'@'172.16.1.52' identified by 'sss';" 4. #xxx为数据库密码,user为给52授权的账户名,sss为给52授权的密码 5. mysql -uroot -pxxx -e "flush privileges;" 6. #xxx为数据库密码
5、从数据库进行如下配置
xxx为从数据库密码,qqq为主数据库密码,注意密码替换,172.16.1.51为主数据库内网服务器
1. mysql -uroot -pxxx -e "change master to master_host='172.16.1.51',master_user='user',master_password='sss';" 2. #xxx为数据库密码,user为51授权给52的用户名,sss为51授权给52的密码 3. mysql -uroot -pxxx -e "flush privileges;" 4. #xxx为数据库密码 5. mysql -uroot -pxxx -e "start slave;" 6. #xxx为数据库密码 7. mysql -uroot -pxxx -e "show slave status\G;" 8. #xxx为数据库密码 9. ...... 10. Slave_IO_Running: Yes 11. Slave_SQL_Running: Yes 12. ......
6、测试数据库主从同步
主数据库创建数据库,检查从数据库是否显示
1. [root@DB01 ~]# mysql -uroot -pxxx 2. Welcome to the MariaDB monitor. Commands end with ; or \g. 3. Your MariaDB connection id is 19 4. Server version: 5.5.68-MariaDB MariaDB Server 5. 6. Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. 7. 8. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 9. 10. MariaDB [(none)]> show databases; 11. +--------------------+ 12. | Database | 13. +--------------------+ 14. | information_schema | 15. | mysql | 16. | performance_schema | 17. | test | 18. +--------------------+ 19. 4 rows in set (0.00 sec) 20. MariaDB [(none)]> create database hehe; #创建 21. Query OK, 1 row affected (0.00 sec) 22. 23. MariaDB [(none)]> 24. 25. [root@DB02 ~]# mysql -uroot -pxxx 26. Welcome to the MariaDB monitor. Commands end with ; or \g. 27. Your MariaDB connection id is 9 28. Server version: 5.5.68-MariaDB MariaDB Server 29. 30. Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. 31. 32. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 33. 34. MariaDB [(none)]> show databases; 35. +--------------------+ 36. | Database | 37. +--------------------+ 38. | information_schema | 39. | mysql | 40. | performance_schema | 41. | test | 42. +--------------------+ 43. 4 rows in set (0.00 sec) 44. 45. MariaDB [(none)]> show databases; #主数据库创建后从数据库也显示 46. +--------------------+ 47. | Database | 48. +--------------------+ 49. | information_schema | 50. | hehe | 51. | mysql | 52. | performance_schema | 53. | test | 54. +--------------------+ 55. 5 rows in set (0.00 sec) 56. 57. MariaDB [(none)]>
我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!