mysql数据库多种备份及读写分离搭建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql数据库多种备份及读写分离搭建相关的知识,希望对你有一定的参考价值。

数据库的版本

1.社区版

2.企业版

3.集群版

数据库的安装

1.     专用软件包管理器(二进制)

deb 、rpm等

mysql                 MySQL客户端程序和共享库

mysql-server            MySQL服务器需要的相关程序

2.     源代码软件包(编译安装)

configure、cmake

数据库常用的配置选项

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql    ----指定残可安装路径(默认的就是/usr/local/mysql)

-DMYSQL_DATADIR=/data/mysql                  ----mysql的数据文件路径

-DSYSCONFDIR=/etc                                 ----配置文件路径

-DWITH_INNOBASE_STORAGE_ENGINE=1        ----使用INNOBASE存储引擎

-DWITH_ARCHIVE_STORAGE_ENGINE=1         ----常应用于日志记录和聚合分析,不支持索引

-DWITH_BLACKHOLE_STORAGE_ENGINE=1      ----黑洞存储引擎

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1  编译过程中取消一些存储引擎指令介绍

-DWITHOUT_FEDERATED_STORAGE_ENGINE=1

-DWITHOUT_PARTITION_STORAGE_ENGINE=1

-DWITH_READLINE=1      ----支持批量导入mysql数据

-DWITH_SSL=system      ----mysql支持ssl会话,实现基于ssl的数据复

-DWITH_ZLIB=system      ----压缩库

-DWITH_LIBWRAP=0        ----是否可以基于WRAP实现访问控制

-DMYSQL_TCP_PORT=3306                  ----默认端口

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock      ----默认套接字文件路径

-DENABLED_LOCAL_INFILE=1                ----是否启用LOCAL_INFILE功能

-DEXTRA_CHARSETS=all                            ----是否支持额外的字符集

-DDEFAULT_CHARSET=utf8                  ----默认编码机制

-DDEFAULT_COLLATION=utf8_general_ci    ----设定默认语言的排序规则

-DWITH_DEBUG=0                          ----DEBUG功能设置

 -DENABLE_PROFILING=1                    ----性能分析功能是否启用

3.     服务:mysqld

4.     端口:3306

5.     主配置文件:/etc/my.cnf

6.     脚本:mysql_install_db

7.     mysqld_safe

8.     数据目录:/var/lib/mysql

9.     套接字文件:/var/lib/mysql/mysql.sock

10.  当意外关闭数据库时,再开启时假如开启不了,找到这个,删除再启动

11.  进程文件:/var/run/mysqld/mysqld.pid

登录及退出mysql环境

a)    设置密码 mysqladmin      -uroot          password ‘123’

b)    登录              mysql  -u 用户名 -p

-p 用户密码 

-h 登陆位置(主机名或ip地址)

-P 端口号(3306改了就不是了)

-S 套接字文件(/var/lib/mysql/mysql.sock)

       c)    退出              exit

       d)    创建登录用户       create user 用户名@’%’ identified by ‘密码’

       e)    修改密码       set password=password(‘新密码’)

setpassword for 用户@登录位置=password(‘新密码’)      — — — root用户为其他用户找回密码

当管理员把自己密码忘记了,怎么找回???

1)关闭数据库

2)修改主配置文件(/etc/my.cnf)<------ skip-grant-tables

3)启动数据库

4)空密码登录并修改密码

update   mysql.user setpassword=password(‘新密码’) where user=’root’;

5)删除skip-grant-tables,重启数据库验证新密码

SQL语句

关于库的操作:

Mysql命令

功能

show  databases;

查看服务器中当前有哪些数据库

use  数据库名;

选择所使用的数据库

create database 数据库名;

创建数据库

drop database 数据库名;

删除指定的数据库

 关于表的操作

MySQL命令

功能

create table 表名 (字段1 类型1,...);

在当前数据库中创建数据表

show  tables;

显示当前数据库中有哪些数据表

describe   表名;

显示当前或指定数据库中指定数据表的结构(字段)信息

drop table  表名;

删除当前或指定数据库中指定的数据表

alter  table 旧表名 rename 新表名;

修改数据表的名称

alter  table 表名 modify 字段 类型;

修改字段的类型

alter  table 表名 change 旧字段名 新字段名 类型;

修改字段

alter  table 表名 add 字段 类型(first/after)

增加字段

alter  table 表名 drop 字段

删除字段

MySQL命令

功能

insert into 表名(字段1,字段2,……) values(字段1的值, 字段2的值,……);

向数据表中插入新的记录

update 表名 set 字段名 =新数据  where 条件表达式;

修改、更新数据表中的记录

select 字段名1,字段名2……from 表名 where 条件表达式;

从数据表中查找符合条件的记录

select * from 表名;

显示当前数据库的表中的记录

delete from 表名 where 条件表达式;

                     between...and...

在数据表中删除指定的记录

指定范围

delete from 表名;

将当前数据库表中记录清空

 注:库和表的删除用drop,记录删除用delete

 

权限

grant权限1,权限2,...... on 数据库.数据表 to 用户@登录位置 (identified by ‘密码’);

revoke取消的权限1,取消的权限2,...... on 数据库.数据表 from 用户@登录位置;

showgrants for 用户@登录位置;

备份和还原

冷备份:把数据库关闭,离线备份(使用cp、tar等命令直接备份数据库所存放的目录)

FRM 结构

MYI  索引

MYD  数据

快照备份:(利用逻辑卷)

逻辑备份:

mysqldump

备份:mysqldump -u 用户名 -p 数据库名 > /备份路径/备份文件名(备份单个数据库)

mysqldump-u 用户名 -p 数据库名 表名 > /备份路径/备份文件名(备份数据表)

--databases库1,库2 (此时还原--->mysql< 备份文件)

--all-databases—备份服务器中的所有数据库内容

还原:mysql 数据库 < 备份文件

mysqlhotcopy

备份:mysqlhotcopy--flushlog -u=’用户’ -p=’密码’--regexp=正则 备份目录

还原:cp-rpf 备份目录 数据目录(/var/lib/mysql)

补充的备份机制

1.日志备份

>mysqlshow global variables like ‘%log%’

列出mysql中和日志相关的变量

错误日志

服务器启动和关闭时的信息

服务器运行过程中的错误信息

从服务器启动从服务器进程时产生的信息

log-error      错误日志的路径

一般日志(不启用)

记录用户对数据库的查询操作

general-log=ON  启动一般查询日志

log=ON               全局日志开关

log-output         日志的记录类型

慢查询日志

记录需要较长时间的查询操作

log-slow-queries=保存路径  启动慢查询日志,并设置个路径

二进制日志

所有对数据库状态更改的操作(create、drop、update等)

log-bin=位置 启动二进制日志

>mysql  show binary logs  查看当前使用的二进制日志

>mysqlshow binlog events in ‘二进制日志(mysql-bin.000001)’ 查看二进制日志的内容

还原:(mysqlbinlog)

按时间还原:

mysqlbinlog  --start-datetime ‘YY-MM-DD HH:MM:SS’--stop-datetime ‘YY-MM-DD HH:MM:SS’ 二进制日志 | mysql(-urot -p)   

 按文件大小还原:

--start-position

--stop-position

事务日志:记录事务相关的日志信息

中继日志:记录从服务器的备份信息

2.多机备份

主从配置:实时备份

主主配置:(配置了2遍的主从)实时备份、负载均衡

多从一主:实时备份(更多的备份节点)

多主一从:实时备份、节约成本

 

实验

1.创建mysql的登录用户yzh可以登录mysql服务器

1.创建登录用户

# yum  install mysql-server –y

# servicemysqld start                           

技术分享

在另一台虚拟机上测试

技术分享


创建的用户为自己更改密码

技术分享

root用户为其他用户找回密码

技术分享

root找回自己的密码并修改

技术分享

技术分享


数据库的增、删、改、查实验

创建数据库

技术分享

创建数据表

技术分享

复杂一点的,,,

技术分享

插入数据

技术分享

技术分享

将表a2的数据复制到表a1

技术分享

删除数据库

技术分享

删除数据表

技术分享

删除表里的数据记录

技术分享

删除年龄在23-25之间的

技术分享

修改表中的数据

技术分享

修改数据表的名称

技术分享

修改数据表的字段类型

技术分享

修改数据表的字段

技术分享

添加字段

技术分享

技术分享

删除字段

技术分享

给用户授权

1.给用户全部权限

技术分享

取消yzh用户的删除库、表、表中数据的权限

技术分享

查看用户的权限

技术分享

2.备份和还原数据库文件

单个备份命令mysqldump  -uroot -p  --databases  ab > /ab.sql

多个数据库的备份,数据库之间用空格隔开

mysqldump  -uroot -p  --databases  aa  ab> /1.sql

1.把数据库aa备份到/root目录下

技术分享

2.模拟数据库aa丢失(删除数据库aa)

技术分享

3.还原

技术分享

注:此处可以会报错,如下:

技术分享

解决方法为:

A、修改配置文件添加 skip-grant-tables 跳过密码验证。进入mysql后再修改root密码,

B、删除配置文件中的skip-grant-tables ,重启服务用新密码再进入!

1.备份多个数据库(--databases)

技术分享

2.还原

技术分享

1.备份有规则的数据库

技术分享

2.模拟数据库删除

技术分享

3.还原

技术分享

技术分享

5.关于二进制日志还原(此处实验都没有成功,以后再试

开启二进制日志

技术分享

查看二进制日志文件

技术分享

按时间还原:

1.如果数据库中的bb库被删,需要还原

技术分享

2.查看二进制日志内容

技术分享

3.还原并查看

技术分享


按文件大小还原:

还原到bb库被删除的数据状态

1.查看bb库被删除前后的文件大小

技术分享

2.还原并查看

技术分享

6.主从备份

前提条件:安装了mysql,开启了二进制日志

技术分享

在主服务器上授权,从服务器保存授权的信息

技术分享


之后在从服务器会产生授权信息文件

技术分享

开启从服务器start slave,并查看

技术分享

测试

技术分享

7.主主备份(直接将实验6的主从反向再配置一遍,也可做主主备份),本实验增加的参数只是为了提高效率,在数据库数据庞大的情况下,效果显著。

1.以1为主,2为从配置一遍主从

a)    在主配置文件中配置一下(开启二进制日志和其他内容)

技术分享

b)    在2上做相同的配置

技术分享

c)    启动服务器

技术分享

d)    在主服务器(1)上授权

技术分享

e)    在从服务器(2)上保存授权信息

技术分享

2.以2为主,1为从配置一遍主从

a)    在主服务器(2)上授权

技术分享

b)    在从服务器(1)上保存授权信息

技术分享

3.开启从服务器start slave,并查看

技术分享

4.测试

技术分享

8.多从一主

1.主服务器配置

a)    开启二进制日志,并开启mysql

技术分享


b)    在主服务器上授权

技术分享

2.从服务器配置

a)    开启二进制日志,并启动mysql

技术分享


b)    保存授权信息

技术分享

c)    在另一台从服务器上做相同的配置

技术分享

技术分享


d)测试

技术分享

9.多主一从

1.主服务器配置

a)   开启二进制日志,启动服务

技术分享

技术分享

b)   授权

技术分享

c)   在主服务器2上做相同的操作

技术分享

技术分享


2.从服务器操作

a)   对主配置文件操作

技术分享

b)   初始化数据库,生成目录mysqla,mysqlb

技术分享

技术分享


c)   设置mysqla,mysqlb目录及以下文件的属主的权限为mysql(防止出现权限问题)

技术分享

d)   启动从服务器线程


技术分享

e)   登录并保存授权信

技术分享

       技术分享


3.测试

技术分享技术分享


10.读写分离

环境部署:

主服务器——192.168.115.191

从服务器——192.168.115.193

中间件服务器——192.168.115.192

中间件:一种提供在不同技术、不同的软件之间共享资源的程序

tomcat  weblogic

数据库的中间件:mysql proxy (官方版本) 性能低,需要lua脚本

atlas 性能低,相应时间长

amoeba陈思儒研发的

一.先搭建一个主从关系的服务器

1.在主、从服务器上安装mysql mysql-server

技术分享

2.开启二进制日志

技术分享


3.在主服务器上授权,从服务器上保存授权信息,并开启从服务线程。

   Master服务器

技术分享技术分享


Slave服务器

技术分享

 

二.配置读写分离 (192.168.115.192中间件服务器上配置

1.安装gcc环境(amoeba需要源码安装)

技术分享

2.拷贝第三方软件,创建单独的目录

技术分享


3.先安装jdk(amoeba是由java语言编写的,所以先安装jdk),配置java环境

技术分享

声明用java写出来的程序如何调用(/etc/profile)手动添加内容

技术分享

技术分享

4.安装amoeba

a)   解压


技术分享

b)   配置amoeba这个软件

技术分享

<server>.....</server>区域

技术分享

<dbServerList>......</dbServerList>区域

技术分享


由于只提供了一个服务器模板,需要自己复制另一个填写关于读的(
直接复制64行到109行,插入在109行之后

技术分享


修改下端的读写服务器

技术分享

c)启动amoeba

修改一下启动脚本 vim /usr/local/amoeba/bin/amoeba

技术分享

先在主服务器191上开启amoeba用户的授权(从服务器自动同步)

技术分享

再在193的amoeba服务器上开启amoeba服务

nohup bash -x /usr/local/amoeba/bin/amoeba& 把这个放到后台 退出终端也可以继续运行

技术分享

ps aux | grep amoeba    然后查看一下运行的程序查看到的话就说明程序已经运行了起来

技术分享

三.测试(安装一个MySQL 软件包 才可以连接)

    启动amoeba端的mysql服务 service mysqld start

技术分享

使用配置文件中amoeba配置中的用户名和密码登录amoeba端的mysql服务

技术分享


关闭从服务器的从同步功能

技术分享

在主、从服务器上创建表a1,在主服务器的表中插入数据

技术分享

之后在客户端登录测试::::

读取池的效果:

技术分享

写入池效果

技术分享

以上测试纯粹为了实验效果,在实际生产中,主从开启,主服务器上写入的数据也会同步到从服务器中。。。。。。


本文出自 “老白博客” 博客,请务必保留此出处http://ycreazy.blog.51cto.com/12237051/1931710

以上是关于mysql数据库多种备份及读写分离搭建的主要内容,如果未能解决你的问题,请参考以下文章

比特 | MySQL 读写分离介绍及搭建

基于Centos 7搭建MySQL主从复制及读写分离

十四linux-MySQL的数据库集群读写分离及高可用性备份等

轻松搭建MySQL主从复制读写分离(双机热备)

一口气搭建完MySQL主从同步及读写分离

Amoeba mysql读写分离搭建及介绍