MySQL使用LVM快照实现备份

MySQL使用LVM快照实现备份,第1张

新建一个lvm磁盘,这里我建的lv为mydatalv,挂载到了/data下

[root@localhost

~]#

lvs

LV

VG

Attr

LSize

Pool

Origin

Data%

Meta%

Move

Log

Cpy%Sync

Convert

mydatalv

mydata

-wi-ao----

1.00g

[root@localhost

~]#

df

-h

文件系统

容量

已用

可用

已用%

挂载点

/dev/mapper/mydata-mydatalv

976M

2.6M

907M

1%

/data

将原数据库文件复制到/data目录下

[root@localhost

~]#

cp

-a

/var/lib/mysql

/data/

修改配置文件,将mysql数据库文件放在lvm盘中,二进制文件放在非lvm盘的/var/lib/mysql/目录下

[root@ns1

~]#

vim

/etc/my.cnf

[mysqld]

log_bin=/var/lib/mysql/mysql-bin

datadir=/data/mysql

[root@localhost

~]#

service

mariadb

restart

[root@localhost

~]#

ls

/data/mysql

aria_log.00000001

ibdata1

ib_logfile1

mysql-bin.000001

mysql-bin.000003

performance_schema

aria_log_control

ib_logfile0

mysql

mysql-bin.000002

mysql-bin.index

test

可以看到重启后数据库文件已存放在了/data/mysql目录中了

对mysql进行锁表备份

[root@localhost

~]#

mysql

-e

'flush

tables

with

read

lock'

锁表

[root@localhost

~]#

mysql

-e

'flush

logs'

对日志进行滚动,

[root@localhost

~]#

mysql

-e

'show

master

status'

>

/root/back.$(date

+%F+%T)

[root@localhost

~]#

ls

back.2016-07-13+10:14:29

对lv创建快照

[root@localhost

~]#

lvcreate

-L

1G

-n

mysqlback

-p

r

-s

/dev/mydata/mydatalv

释放锁

[root@localhost

~]#

mysql

-e

'unlock

tables'

在别的磁盘上创建备份目录,只读挂载快照后备份至备份目录

[root@localhost

~]#

mkdir

/myback

[root@localhost

~]#

mount

-r

/dev/mydata/mysqlback

/mnt

[root@localhost

~]#

cp

-a

/mnt/mysql

/myback

修改表内容,然后删除掉数据库文件内容即/data/mysql中的内容

[root@localhost

~]#

mysql

MariaDB

[hellodb]>

use

hellodb

MariaDB

[hellodb]>

insert

into

classes

(class,numofstu)

values

('xxoo',39)

[root@localhost

~]#

rm

-rf

/data/*

修改配置文件中二进制日志和数据库文件的位置

[root@localhost

~]#

vim

/etc/my.cnf

[mysqld]

log_bin=/data/mysql/mysql-bin

datadir=/data/mysql

利用/myback/中的内容还原

[root@localhost

~]#

cp

-a

/myback/*

/data/

[root@localhost

~]#

service

mariadb

restart

利用二进制日志还原快照后的 *** 作,由下面这个文件来查看快照执行时二进制日志的位置

[root@localhost

~]#

cat

back.2016-07-13+10\:14\:29

File

Position

Binlog_Do_DB

Binlog_Ignore_DB

mysql-bin.000014

245

将000014中245之后的 *** 作做成sql文件,进行还原

[root@localhost

~]#

mysqlbinlog

--start-position=245

/var/lib/mysql/mysql-bin.000014

>

binlog.sql

[root@localhost

~]#

mysql

<

/root/binlog.sql

查看恢复情况

[root@localhost

~]#

mysql

MariaDB

[(none)]>

use

hellodb

MariaDB

[hellodb]>

select

*

from

classes

+---------+----------------+----------+

|

ClassID

|

Class

|

NumOfStu

|

+---------+----------------+----------+

|

1

|

Shaolin

Pai

|

10

|

|

2

|

Emei

Pai

|

7

|

|

3

|

QingCheng

Pai

|

11

|

|

4

|

Wudang

Pai

|

12

|

|

5

|

Riyue

Shenjiao

|

31

|

|

6

|

Lianshan

Pai

|

27

|

|

7

|

Ming

Jiao

|

27

|

|

8

|

Xiaoyao

Pai

|

15

|

|

9

|

xxoo

|

39

|

+---------+----------------+----------+

9

rows

in

set

(0.00

sec)

新建一个lvm磁盘,这里我建的lv为mydatalv,挂载到了/data下

?

1

2

3

4

5

6

[root@localhost ~]# lvs

LVVG AttrLSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert

mydatalv mydata -wi-ao---- 1.00g

[root@localhost ~]# df -h

文件系统 容量 已用 可用 已用% 挂载点

/dev/mapper/mydata-mydatalv 976M 2.6M 907M 1% /data

将原数据库文件复制到/data目录下

[root@localhost ~]# cp -a /var/lib/mysql /data/

修改配置文件,将mysql数据库文件放在lvm盘中,二进制文件放在非lvm盘的/var/lib/mysql/目录下

?

1

2

3

4

5

6

7

8

[root@ns1 ~]# vim /etc/my.cnf

[mysqld]

log_bin=/var/lib/mysql/mysql-bin

datadir=/data/mysql

[root@localhost ~]# service mariadb restart

Linux上MySQL优化提升性能,可以优化关闭NUMA特性如下:

这些其实都源于CPU最新的技术:节能模式。 *** 作系统和CPU硬件配合,系统不繁忙的时候,为了节约电能和降低温度,它会将CPU降频。

为了保证MySQL能够充分利用CPU的资源,建议设置CPU为最大性能模式。这个设置可以在BIOS和 *** 作系统中设置,当然,在BIOS中设置该选项更好,更彻底。

然后我们看看内存方面,我们有哪些可以优化的。

i)我们先看看numa

非一致存储访问结构(NUMA:Non-UniformMemoryAccess)也是最新的内存管理技术。它和对称多处理器结构(SMP:SymmetricMulti-Processor)是对应的。

我们可以直观的看到:SMP访问内存的都是代价都是一样的但是在NUMA架构下,本地内存的访问和非本地内存的访问代价是不一样的。对应的根据这个特性, *** 作系统上,我们可以设置进程的内存分配方式。目前支持的方式包括:

--interleave=nodes

--membind=nodes

--cpunodebind=nodes

--physcpubind=cpus

--localalloc

--preferred=node

简而言之,就是说,你可以指定内存在本地分配,在某几个CPU节点分配或者轮询分配。除非是设置为--interleave=nodes轮询分配方式,即内存可以在任意NUMA节点上分配这种方式以外。其他的方式就算其他NUMA节点上还有内存剩余,Linux也不会把剩余的内存分配给这个进程,而是采用SWAP的方式来获得内存。

所以最简单的方法,还是关闭掉这个特性。

关闭特性的方法,分别有:可以从BIOS, *** 作系统,启动进程时临时关闭这个特性。

a)由于各种BIOS类型的区别,如何关闭NUMA千差万别,我们这里就不具体展示怎么设置了。

b)在 *** 作系统中关闭,可以直接在/etc/grub.conf的kernel行最后添加numa=off,如下所示:

kernel/vmlinuz-2.6.32-220.el6.x86_64roroot=/dev/mapper/VolGroup-rootrd_NO_LUKS.UTF-8rd_LVM_LV=VolGroup/rootrd_NO_MDquietSYSFONT=latarcyrheb-sun16rhgbcrashkernel=autord_LVM_LV=VolGroup/swaprhgbcrashkernel=autoquietKEYBOARDTYPE=pcKEYTABLE=usrd_NO_DMnuma=off

另外可以设置vm.zone_reclaim_mode=0尽量回收内存。

c)启动MySQL的时候,关闭NUMA特性:

numactl--interleave=allmysqld

当然,最好的方式是在BIOS中关闭。

ii)我们再看看vm.swappiness。

vm.swappiness是 *** 作系统控制物理内存交换出去的策略。它允许的值是一个百分比的值,最小为0,最大运行100,该值默认为60。vm.swappiness设置为0表示尽量少swap,100表示尽量将inactive的内存页交换出去。

具体的说:当内存基本用满的时候,系统会根据这个参数来判断是把内存中很少用到的inactive内存交换出去,还是释放数据的cache。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5919585.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-08
下一篇 2023-03-08

发表评论

登录后才能评论

评论列表(0条)

保存