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数据库多种备份及读写分离搭建的主要内容,如果未能解决你的问题,请参考以下文章