分类目录归档:数据库

围绕数据库的核心-增删改查-必须要知道的东西.没了它所有的东西都是白撘.

Redis 自动故障转移sentinel(哨兵)实践

最近看了Redis自动故障转移Sentinel(哨兵),故将笔记记在次处
注意,实际环境中是,多台机器,本文只是测试,所以在一台机器上配置多个Redis实例,以达到实验的目的

Redis Sentinel(哨兵)

7000配置文件

配置文件编写

设置主从关系

启动三台redis server

查看redis 7000端口的复制信息

配置sentinel

vim redis-sentinel-26379.conf

生成配置文件

启动哨兵

接下来可以测试哨兵的功能了,代码太多就不粘贴上来了,至此Redis自动故障转移简单模型已经完成

用PHP调用Linux命令无权限的问题解决(visudo)

业务背景:  yourcmd为我的linux程序,它对权限要求非常严格,当用php去执行yourcmd程序

系统:CentOS 6.3

apache是php的执行用户

用exec函数去执行linux系统上的程序/usr/local/yourcmd/sbin/yourcmd

php代码如下

测试结果为没有权限
Array ( [0] => sudo: no tty present and no askpass program specified )

解决步骤:

1)注释以下行
#Defaults    requiretty

2)在文件末尾加入以下

最后测试结果
Array ( [0] => Warning: memory is too small: 1044725760 [1] => test configure is ok )

mysql主主复制(双主复制)

MySQL主主复制结构区别于主从复制结构。在主主复制结构中,两台服务器的任何一台上面的数据库存发生了改变都会同步到另一台服务器上,这样两台服务器互为主从,并且都能向外提供服务。
有了上一节的主从复制,那么主主复制就很容易了。

一、先修改配置文件

服务器A(192.168.1.254)配置如下

服务器B(192.168.1.252)配置

两台服务器都重启

注:二都只有server-id不同和 auto-increment- offset不同
auto-increment-offset是用来设定数据库中自动增长的起点的,回为这两能服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突
replicate-do-db 指定同步的数据库,我们只在两台服务器间同步test数据库
另:auto-increment-increment的值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为2

二、同步数据

本文是用test做的实验,导出将test.sql文件从254服务器拷贝到252服务器
备份数据前先锁表,保证数据一致性 继续阅读

CentOS6.3 mysql主从复制(注:mysql是通过yum源安装的)

mysql复制的优点主要包括以下3个方面:
1.如果主服务器出现问题,可以快速切换到从服务器提供的服务
2.可以在从服务器上执行查询操作,降低主服务器的访问压力
3.可以在从服务器上执行备份,以避免备份期间影响主服务器的服务

注意:一般只有更新不频繁的数据或者对实时性要求不高的数据可以通过从服务器查询,实时性要求高的数据仍然需要从主服务器获得

主服务器配置
我的服务器采用yum安装,如果想配置文件
设置默认编码等一些初始参数(my.cnf)(若无my.cnf, 则可cp /usr/share/mysql/my-small.cnf /etc/my.cnf)

前期准备数据:
两台服务器
master:192.168.1.111(主服务器)
slave:192.168.1.112(从服务器)
网络互通(关闭防火墙,关闭selinux)具体方法请看链接

一、主从服务器分别作以下操作

1.1、版本一致
1.2、初始化表,并在后台启动mysql
1.3、修改root的密码(新安装的mysql没有密码)
二、mysql主服务器配置master(192.168.1.111)

1)修改主服务器master:

2)给从服务器设置授权用户(创建复制帐号)

建立一个帐户mysync,并且只能允许从192.168.1.112这个地址上来登陆,密码是123456。
(如果因为mysql版本新旧密码算法不同,可以设置:set password for ‘mysync’@’192.168.1.112’=old_password(‘123456’))

3)在主服务器上设置读取锁定有效,确保没有数据库操作,以便获得一个一致性的快照

4)查看主服务器上当前的二进制日志名和偏移量值

5)目前主数据库服务器已经停止了更新操作,生成主数据库的备份,备份的方式有两种:

(1)cp全部的数据
如果主数据库的服务可以停止,那么直接cp数据文件应该最快的生成快照的方法:
(2)mysqldump备份数据方法
[root@localhost ~]# /usr/bin/mysqldump -uroot -p123456 test -l -F >/tmp/test.sql

6)主数据库备份完毕后,主数据库可以恢复写操作,剩下的操作只需要在从服务器上去执行:

mysql> unlock tables;

7)把主数据库的一致性备份恢复到从数据库上,把以上的压缩包解压到相应的目录即可

三、mysql从服务器配置slave(192.168.1.112)

1)修改从服务器slave:

2)将主库上备份的数据库恢复到从库(导入之前备份数据)

-v查看导入的详细信息
-f是当中间遇到错误时,可以skip过去,继续执行下面的语句

3)重启从库MYSQL

4)登录从库的MySQL命令行,执行:

5)启动从库连接,执行:

6)查看从库状态:

如果有出现以上结果,则配置成功

centos6.3系统mysql数据库字符集设置,彻底解决乱码情况

今天在部署一个系统时,网页出现了乱码。于是各种百度(之前一直用同一种方式,但是没影响使用),
下面做个试验。
本服务器系统是centos6.3,lamp环境全部用yum安装。没有优化过任任何配置
下面看mysql默认字符集配置

接下来我们建一个数据库 继续阅读

简单记录mysql中inser into select语句测试

mysql迅速制造大批数据,复制一个表中的(部分或全部)数据到另一个表中。

用法:INSERT INTO table_name1 (field1,field2) SELECT field1,field2 FROM table_name2;

前提条件

查看一下结构,更直观 继续阅读

由导出sql语句导致错误感想

最近在维护项目过程当中根据新提的需求在某表加了几个字段,这必然要升级系统安装程序当中的sql语句,本来想是把这几个加的字段的修改语句放到sql文件当中。后来归鬼使神差的,想到把整个sql文件都更新(新导出一份sql文件)。

心里想现在这份sql文件是最全的。肯定万无一失。在这之后安装的时候就出现一个安装速度巨慢的问题。10多分才可以安成。最后经一个师兄指导。是我的sql文件有问题。之前的sql文件(旧)是用mysqldump导出的,现在的sql文件(新)是用navicat(一款mysql管理工具)导出的。这两者之间是有区别的。

mysqldump导出的文件:

navicat导出的文件:

把一个表当的所有记录做成一条sql语句来执行,后者是把每一条记录做成一条sql来执行,结果可想而知。当有一定的量的数据时效率就会非常明显。
记得以后导出sql文件一定要用mysqldump(或者专门处理sql语句的脚本)。来保证我们的程序正常运行。

这次小小而深刻的教训,让我想起来前几天看coolshell.cn上的一篇文章“「我只是认真」聊聊工匠情怀”,里面有一些话颇有感触。 继续阅读

mysql-binlog日志恢复数据库

binlog日志用于记录所有更新了数据或者已经潜在更新了数据的所有语句。语句以“事件”的形式保存,它描述数据更改。当我们因为某种原因导致数据库出现故障时,就可以利用binlog日志来挽回(前提是已经配置好了binlog),接下来我们来配置

一、开启mysql-binlog日志

在mysql配置文件my.cnf加上如下配置

重启mysql

二、备份数据库

1)先查看一下当前数据库情况

2)备份数据到/tmp/test.sql

三、这时模拟误操作(插入3条数据,删除数据库)

删除数据

此时突然数据库损坏或者人为删除

四、此时数据库已经被完全破坏

1)用已经备份的/tmp/test.sql来恢复数据

2)还有三条数据没有恢复,怎么办。只能用bin-log来恢复

3)恢复成功

【总结】:mysql备份和bin-log日志

备份数据:

查看binlog日志:

导入之前备份数据:

恢复binlog-file二进制日志文件:

从某一(367)点开始恢复:

先查好那一点(用more来查看)

然后恢复:

重置binlog日志

mysql> flush logs;#关闭当前的二进制日志文件并创建一个新文件,新的二进制日志文件的名字在当前的二进制文件的编号上加1。

【MySQL】mysqlnd cannot connect to MySQL 4.1+ using the old insecure【解决方法】

2012-11-21 11:04
【MySQL】mysqlnd cannot connect to MySQL 4.1+ using the old insecure【解决方法】

mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD(‘your_existing_password’). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file. SQL 错误代码: “7335941”.

是采用兼容格式的密码,而 php5.3的php_mysql; php_pdo_mysql 采用的是增强的密码,所以导致两者不匹配,最方便的方式还是更新db的设置,取消 old_passwords
然后在 mysql.mysql.user,更新所有用户的密码, 如:

 

ubuntu下navicat11.0.7到期解决办法

之前一直用navicat10.x版本,每当到期,删除家目录下 .navicat/system.reg文件,就可以重新使用

到了navicat11.x的版本,这个办法已经不好使了,当你像上述操作可以看到到期推迟了一个月,可是打开库后再打开表会出现错误。表打不开了,这也是人家维护版权的一个更新吧。

ubuntu下navicat11.0.7到期解决办法,删除家目录下的

(注意:些操作会删除所有的数据库链接)

这样其实相当于重新安装了一个navicat,以前的数据库链接都不见,但是比重新安装还稍微简单一些。
虽然我这么可耻的做了。但是我还是得说一句此上做法为学习交流使用。正常使用,请购买正版