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

Posted 染血的茉莉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于CentOS7的MySQL数据库主从备份相关的知识,希望对你有一定的参考价值。

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() #读

 

以上是关于基于CentOS7的MySQL数据库主从备份的主要内容,如果未能解决你的问题,请参考以下文章

web服务文件更新自动同步数据库主从复制shell脚本实现网站代码备份和mysql备份

第十一期:基于两台Mysql5.5配置主从同步并进行数据库备份

MySQL 单机双机主从同步复制备份配置

MySQL 单机双机主从同步复制备份配置

Centos7搭建基于GTID的MySQL主从复制架构

在CentOS7上搭建MySQL主从复制与读写分离