八月 27th, 2018 by lanxinxichen@126.com

安装

1. 从官方网站下载Percona XtraBackup,依赖环境rsync perl-DBD-Mysql libev,使用yum源安装以上依赖,高版本的mysql可能还需要mysql-community-libs-compat适配支持.
2. 从github上下载autoxtrabackup脚本

定期备份

利用autoxtrabackup配置一定的参数可以实现定期增量备份.

backupDir=/home/database_bak 备份路径
hoursBeforeFull=240 全量备份间隔时间
mysqlUser=root 本地数据库备份采用用户名
mysqlPwd=root 本地数据库备份采用密码
compression=false 备份是否压缩
compressThreads=8 压缩线程
keepDays=30 备份持有时间
sendEmail=never 备份完成是否发邮件
emailAddress=

配置好参数之后添加到crontab任务调度中(每天晚上23点备份数据库).

00 23 * * * /home/software/autoxtrabackup/autoxtrabackup.sh

备份生成的路径如下:

/home/database_bak/
├── 2018-08-24_11-27-36_full
├── 2018-08-24_13-23-51_incr
├── 2018-08-24_23-40-01_incr
├── 2018-08-25_23-40-01_incr
└── 2018-08-26_23-40-01_incr

还原

注意: 如果要还原数据, 首先要先备份已经备份的数据, 特别是全量数据.

autoxtrabackup的备份原则是一天一个相对于全量的增量的备份, 而不是相对于上一次的增量备份的增量. 所以在看xtrabackup的文档的时候, 需要注意由于采取的备份策略不同, 还原流程也是不一样的,具体对比可以看扩展内容.
根据增量备份数据还原数据库流程, 假设我需要还原2018-08-26的数据库数据
1. 找到最后一次的完整备份

innobackupex –apply-log –redo-only /home/database_bak/2018-08-24_11-27-36_full/

2. 找到2018-08-26的增量备份

innobackupex –apply-log /home/database_bak/2018-08-24_11-27-36_full/ –incremental-dir=/home/database_bak/2018-08-26_23-40-01_incr/

3. 准备数据

innobackupex –apply-log /home/database_bak/2018-08-24_11-27-36_full/

4. 回拷数据

innobackupex –copy-back /home/database_bak/2018-08-24_11-27-36_full/

5. 更改文件权限

chown –R mysql:mysql

6. 启动mysql服务

server mysqld start

扩展

对比标准增量备份和autoxtrabackup增量备份

官方推荐的使用办法是创建一个原始的增量备份, 第一次增量备份是针对全量备份, 第二次备份是针对第一次增量备份的增量备份, 同理第三次是针对第二次的增量备份.
而autoxtrabackup采用的是每次都针对原始的全量备份的增量备份.
二者在还原的时候自然也不一样, 标准的备份需要把增量一次一次的还原进去, 这样比较灵活. autoxtrabackup则增加实用, 需要还原的时候只需要找到全量备份,并且拿对应日期的增量备份, 即可还原到全部数据, 当然中间日期的数据就会有冗余.
使用环境就各自根据自己的环境确定吧, 如果每天新增数据比较多, 就采用官方的标准备份, 如果不是很多, 可以接受冗余数据, 并且为了方便的话可以采用autoxtrabackup脚本进行备份.

Posted in 服务器 Tagged with: ,

一月 14th, 2017 by lanxinxichen@126.com

TypeError: not enough arguments for format string

使用Python连接数据库的时候,采用的非常非常轻量级的torndb,甚至于事务都不支持,所以用”select * from table where condition=’%s'” % (condition,)

因为用的比较原生,所以各种问题接连不断,最最恶心的就是字符串转义造成的一些列原因.

先采用

condition = re.escape(condition)

能对特殊字符进行转义,但是还是有问题,又报错TypeError: not enough arguments for format string 直到认真看输入的condition字符串的时候,才发现问题所在之处: condition中有% 需要替换%为%%才能正常执行,

condition= condition.replace('\%', '%%')

其实标题有问题,不只是操作数据库,只不过在操作数据库时候,忽略的字符串本身的内容,一直在错误的寻找解决方案.

Posted in Coding, Python, 数据库 Tagged with: ,

四月 29th, 2016 by lanxinxichen@126.com

事情的起因是这样的,mysql5.5(包括)以下版本都是不支持设置多个timestamp默认值的,所以当我执行有的表中包含两个timestamp带DEFAULT CURRENT_TIMESTAMP的sql的时候就执行不了了.为了保持代码和数据库的版本一致性,就开始了这次的mysql安装之旅.
第一次安装mysql的时候是大二大三的时候吧,那时候是安装版.我一直以为如果别人的轮子比你造的好,你就不用重复造轮子,所以我以前一直使用的是mysql的集成环境,即使是在linux上面安装mysql也都是按照教程一点一点儿来的,只有当现有的东西不能满足的情况下,才需要自己动手.所以才动手安装mysql5.7的.我按照印象去下载mysql,下载下来结果发现是绿色版,一脸懵逼…接下来就简单记录一下mysql安装中需要解决的几个问题.
1. 解压mysql
解压后注意修改解压文件夹的位置,尽量不要放在中文目录下面,虽然我没有测试是否有问题,但是在这上面遇到的坑又不是一次两次了.
2. 增加配置文件: my.ini
修改默认的my-default.ini文件
[mysqld]
basedir=”D:/MySQL/”   # mysql的解压路径
datadir=”D:/MySQL/data/”  # mysql的数据表的存储路径
3. 初始化mysql (第一个坑)
网上流传的mysql绿色版的安装方式都是没有这一步的最多指定以下my.ini的位置,但是如果跳过这一步,下面的服务项即使是安装成功了,也会处于”mysql –正在启动中吧  mysql — 启动失败”状态中.所以需要进行mysql的初始化工作.在mysql/bin的目录中执行以下代码:
mysqld –defaults-file=my.ini –initialize-insecure 
如果报mysqld命令不存在的话,请核对你自己的mysql安装路径是否正确,具体查看参考链接1
4. 安装mysql到服务项
这一步就是简单的 mysqld –install 同时如果想要卸载服务项的话,就使用mysqld –remove
5. 启动服务项
在cmd命令行中敲入net start mysql ,同样的如果需要停止的话,就敲入 net stop mysql
既然是加入到了服务项中,自然也可以在windows的服务管理中找到这个服务,然后进行操作.
6. 增加一个远程的全局权限的用户
这时候在mysql/bin 目录中敲入 mysql -u root 进入到mysql命令行中,修改密码,不知道mysql是哪个版本开始,密码的字段名不再是password而是authentication_string,蜜汁设定...具体查看参考链接2

update user set authentication_string=password('root') where user='root';

这时候的root用户只能在本地访问的,我强制修改数据表的localhost为%还是不行,没有验证是不是配置文件也需要修改,印象中之前的版本就是控制字段就可以 了.这条路行不通,那么我就需要增加一个远程访问的超级管理员用户了.按照参考链接3就尅完成操作了.
创建一个远程访问的超级管理员chen,密码为chen
grant all privileges on *.* to chen@’%’ identified by ‘chen’;
 
参考:
解决Windows安装解压版MySQL出现服务正在启动-服务无法启动的问题
mysql-user-db-does-not-have-password-columns-installing-mysql-on-osx
mysql创建超级管理员

Posted in 数据库 Tagged with:

四月 29th, 2015 by lanxinxichen@126.com

thinkphp报错mysql_attr_init_command undefined class

mysql_attr_init_command

mysql_attr_init_command 报错


在网上查到的结果如下:
1.php.ini配置文件中pdo_mysql.dll未开启
2.php版本过低,升级5.3
3.php扩展的pdo_mysql扩展未安装
 
那么.我就先按搜到的结果一步一步走:
先修改配置文件,找到php.ini,修改保存重启httpd,依然报错;
然后升级php,升级以后,发现还是报同样的错误.
查看phpinfo,发现pdo_mysql还是没有没有开启.
没辙了,对比了一下本地环境与服务器环境,发现应该是pdo_mysql.so没有安装,遂按照网上教程一步一步安装,
网上的教程都是一样的,如下
1、下载 文件 或者 进入 在PHP源码包中进入ext/pdo_mysql
http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
2、解压文件
tar -zxvf PDO_MYSQL-1.0.2.tgz
3、配置和编译文件
cd PDO_MYSQL-1.0.2
/usr/local/php/bin/phpize
./configure –with-php-config=/usr/local/php/bin/php-config –with-pdo-mysql=/usr/local/mysql
make
make install
注: PHP安装目录在 : /usr/local/php/
mysql 安装在 : /usr/local/mysql
编译的时候注意替换自己的目录
4、安装到PHP配置下
把这个记住,然后打开 php.ini文件,
并添加一行
extension=pdo_mysql.so
从这一步开始,按照我自己的方法
找到安装完成后提示的路径 …../php/lib/php/extensions/no-debug-non-zts-20090626/
把目录下的pdo_mysql.so移动到上级目录,即…../php/lib/php/extensions/
在php.ini里面做两个操作
extensions_dir = …../php/lib/php/extensions/
extension = …../php/lib/php/extensions/pdo.mysql.so
到此重启服务器,查看phpinfo,pdo已经支持mysql了
pdo_mysql_support

pdo_mysql_support


 

Posted in 软件相关 Tagged with: ,