ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

基于CentOS7的MySQL数据库主从备份

2021-06-14 14:33:00  阅读:179  来源: 互联网

标签:root 数据库 db CentOS7 master 备份 MySQL masterdb 主从


Mysql主从备份介绍

   主从备份就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取数据,不能写入,实现备份的同时也实现了数据库性能的优化,以及提升了服务器安全。

使用主从备份的原因

     Django网站访问量比较大,对数据库的读写操作十分频繁,分析access_log,发现有的数据表查询居多,有的表写入居多,比如session,这样单个数据库执行两种业务操作负担较大,所以使用主从备份的逻辑。

 

 

 主从备份的步骤

 

配置详情演示

 1.开始前,应该保证两台服务器能够互相通信

master:192.168.29.201  

 

 

 

 

minion:192.168.29.129

 

 

 

 

 

2.关闭两台服务器的防火墙和selinux

systemctl stop firewalld #关闭防火墙

setenforce 0  #关闭selinux

3.给两台服务器安装mariadb数据库,并进入 生产模式

yum install mariadb mariadb-server -y #yum安装

systemctl start mariadb #开启服务

systemctl enable mariadb #设置开机启动mariadb 

mysql_secure_installation #初始化

注意:在执行初始化数据库命令操作的时候,该选项要为n Disallow root login remotely? [Y/n] n

4. master创建需要主从备份的数据库

MariaDB [(none)]> create database masterdb charset=utf8;

5. master授权所有用户可以操作表

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;

#授权root用户使用123密码从任意地址段的ip进行登录数据库,并有对所有库中的表操作的权限,且允许该用户给其他用户授权

6.刷新授权表

MariaDB [(none)]> flush privileges;

 7.在master中创建一张测试表

MariaDB [masterdb]> create table master_table(id int primary key auto_increment,username char(32));
Query OK, 0 rows affected (0.01 sec)

8.导出数据库

[root@bogon opt]# mysqldump -h localhost -u root -p123456 masterdb > masterdb.sql

9.将数据库导出文件传递给minion

[root@bogon opt]# scp ./masterdb.sql root@192.168.29.129:/opt

 10.minion创建同名数据库

MariaDB [(none)]> create database masterdb charset=utf8;

Query OK, 1 row affected (0.00 sec)

11.minion导入数据表

[root@bogon opt]# mysql -h localhost -u root -p123456 masterdb < masterdb.sql

12.master启动主从备份的配置

[root@bogon opt]# vim /etc/my.cnf

在[mysqld]中配置以下内容:

server-id=1
log_bin=mysql-bin?
binlog-do-db=masterdb #配置数据库的名字
binlog-ignore-db=mysql

13.重启master的mariadb并查看其状态

[root@bogon opt]# systemctl restart mariadb #重启数据库

MariaDB [(none)]> show master status; #先进入数据库,在查看master备份状态

 

 

 

 

 

14.配置minion主从备份

[root@bogon opt]# vim /etc/my.cnf

在[mysqld]中配置以下内容:

server-id=2
log_bin=mysql-bin?
binlog-do-db=masterdb # 配置数据库的名字
binlog-ignore-db=mysql

15.重启服务器

[root@bogon ~]# systemctl restart mariadb

16.客户端上指定要进行主从备份的主服务器

MariaDB [masterdb]> change master to MASTER_HOST='192.168.29.201',MASTER_USER='root',MASTER_PASSWORD='123',MASTER_LOG_FILE='mysql-bin?.000002',MASTER_LOG_POS=245;

Query OK, 0 rows affected (0.01 sec)

17.minion上启动主从备份

MariaDB [masterdb]> slave start;

Query OK, 0 rows affected, 1 warning (0.00 sec)

18.查看slave状态

MariaDB [masterdb]> show slave status\G #不能出现分号

19.出现以下,则说明配置成功!

 

 

 

 

 

 

 

 

 

 

 

20.测试,在master插入一条数据

而在minion可以查到

 Django读写分离配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'masterdb',
        'HOST': "192.168.29.201",
        "USER": "root",
        "PASSWORD": "123456"
    },
    'db2': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'masterdb',
        'HOST': "192.168.29.129",
        "USER": "root",
        "PASSWORD": "123456"
    }
}

自动读写分离

1、同步数据库表:

    python manage.py makemigrations

 python manage.py migrate --database default 

 python manage.py migrate --database db2

2、通过配置数据库路由,来自动实现,这样就不需要每次读写都手动指定数据库了。数据库路由中提供了四个方法。这里这里主要用其中的两个:def db_for_read()决定读操作的数据库,def db_for_write()决定写操作的数据库。

新建router.py脚本,定义Router类:

class Router:
    def db_for_read(self, model, **hints):
        return 'db2'

    def db_for_write(self, model, **hints):
        return 'default'

配置Router ,在settings.py中指定DATABASE_ROUTERS

DATABASE_ROUTERS = ['router.Router',]  

 手动读写分离

在使用数据库时,通过.using(db_name)来手动指定要使用的数据库

models.Products.objects.using('default').create() # 写

models.Products.objects.using('db2').all() #读

 

标签:root,数据库,db,CentOS7,master,备份,MySQL,masterdb,主从
来源: https://www.cnblogs.com/Liu928011/p/14882114.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有