如何在mysql查询进程中完整的查询语句的方法

在主机运行过程中,因为代码设计原因,会造成一些sql语句卡死现象
正常,我们都是在mysql中输入show processlist;来查询
但是这个语句显示的info列,没有把query的sql语句信息完整列出,
对于我们想了解具体,造成麻烦。

全部列出,大家可以试试!

Webmin\Virtualmin中增加网站出现Table ‘mysql.host’ doesn’t exist的错误

Webmin\Virtualmin中增加网站出现Table ‘mysql.host’ doesn’t exist的错误

第一种解决办法是:进入Mysql的bin目录运行mysql -u root -p mysql
输入密码后运行
mysql> SOURCE ../share/mysql_fix_privilege_tables.sql
这种办法应该是Repair数据库吧?
第二种解决办法是:
CREATE TABLE `servers` (
`Server_name` char(64) NOT NULL,
`Host` char(64) NOT NULL,
`Db` char(64) NOT NULL,
`Username` char(64) NOT NULL,
`Password` char(64) NOT NULL,
`Port` int(4) DEFAULT NULL,
`Socket` char(64) DEFAULT NULL,
`Wrapper` char(64) NOT NULL,
`Owner` char(64) NOT NULL,
PRIMARY KEY (`Server_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

centos下使用yum来升级php和mysql

yum是CentOS系统自带的用于方便地添加/删除/更新RPM包的工具,它能自动解决包的倚赖性问题。
用yum更新PHP,只需用一条命令就可以搞定.
#yum update php
#yum update mysql
使用此命令后,系统告诉我,没有发现可更新的包。而当前的PHP版本只是5.2.1,php官方已经更新到更新到5.2.6了。原来CentOS系统的源里PHP仍旧是5.2.1,需要额外的源才能升级PHP。根据其它人的资料,将步骤额外源的步骤如下:
#rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
#vi /etc/yum.repos.d/utterramblings.repo

在打开的文档中加入下面内容
[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

保存。
再次运行下面的命令就可以完成php的升级了
#yum update php
升级到5.2.13
运行下面命令,升级mysql
#yum update mysql
升到5.0.99

具体看:http://www.jasonlitka.com/yum-repository/ 原始出处

mysql主从同步配置全过程

mysql服务器的主从配置,确实是一件很简单的事情

一准备工作
1、mysql配置文件my.cnf的位置
   查找命令: find / -name my.cnf

2、如何启动、停止mysql,找好启动文件
   /etc/init.d/mysql restart
   /etc/init.d/mysql start
   /etc/init.d/mysql stop
二配置步骤
假设有两台机器,已经安装好了mysql(尽量同版本,且两台机器同一网络,可以ping通)
主机A: 192.168.1.100
从机B: 192.168.1.101

可以有多台从机

1、先登录主机 A
mysql>GRANT REPLICATION SLAVE ON *.* TO  ‘backup’@’192.168.1.101’ IDENTIFIED BY  ‘123456’;
赋予从机权限,有多台丛机,就执行多次
这个也可以用主机A的phpMyAdmin 新建一个针对192.168.1.101可访问的拥有权限的用户
2、 打开主机A的my.cnf,输入
server-id= 1    #主机标示,整数
log_bin= /var/log/mysql/mysql-bin.log   #确保此文件可写
read-only=0  #主机,读写都可以
binlog-do-db=test   #需要备份数据,多个写多行
binlog-do-db=testsync   #需要备份数据,多个写多行
binlog-ignore-db=mysql #不需要备份的数据库,多个写多行

3、打开从机B的my.cnf,输入
server-id= 2
log_bin= /var/log/mysql/mysql-bin.log
master-host=192.168.1.100
master-user=backup
master-pass=123456
master-port=3306
master-connect-retry=60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒)
replicate-do-db =test #只复制某个库
replicate-ignore-db=mysql #不复制某个库
4、对/var/log/mysql/ 是否有mysql目录,如没有新建 mkdir mysql,然后设置可写权限  chmod 777 /var/log/mysql/
5、同步数据库
有多种方法,我说简单的一种,先mysqldump导出主机A的数据test为 test.sql
然后在,从机B上建立数据库test,mysql导入 test.sql到test库中

6、先重启主机A的mysql,/etc/init.d/mysql restart,再重启从机B的mysql,/etc/init.d/mysql restart。
7、验证
在主机A中,mysql>show master status\G;
在从机B中,mysql>show slave status\G;
能看到大致这些内容
File: mysql-bin.000001
Position: 1374
Binlog_Do_DB: test
Binlog_Ignore_DB: mysql
可以在主机A中,做一些INSERT, UPDATE, DELETE 操作,看看主机B中,是否已经被修改

三、其它辅助命令
1、为了保护数据在从A导到B的后,数据不发生变动,最好导之前进行锁表操作,导到B主机同步前进行解锁操作
锁表:mysql > FLUSH TABLES WITH READ LOCK;
  注意 为了保证FLUSH TABLES语句让读锁定保持有效。(如果退出客户程序,锁被释放)。建立新的SSH连接,然后对主服务器上的数据进行快照。
解锁:mysql > UNLOCK TABLES;
2、从服务器执行同步
 mysql>start slave;
 mysql>load data from master;
3、验证配置
登录从服务器输入如下命令:
mysql> show slave status\G;
会得到类似下面的列表:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
都为yes,则配置正确.
4、附
一些错误信息的处理,主从服务器上的命令,及状态信息。
在从服务器上使用show slave status\G
Slave_IO_Running,为No,
则说明IO_THREAD没有启动,请执行start slave io_thread
Slave_SQL_Running为No
则复制出错,查看Last_error字段排除错误后执行start slave sql_thread
查看Slave_IO_State字段空 //复制没有启动
Connecting to master//没有连接上master
Waiting for master to send event//已经连上
主服务器上的相关命令:
show master status
show slave hosts
show logs
show binlog events
purge logs to ‘log_name’
purge logs before ‘date’
reset master(老版本flush master)

从服务器上的相关命令:
slave start
slave stop
SLAVE STOP IO_THREAD //此线程把master段的日志写到本地
SLAVE start IO_THREAD
SLAVE STOP SQL_THREAD //此线程把写到本地的日志应用于数据库
SLAVE start SQL_THREAD
reset slave
SET GLOBAL SQL_SLAVE_SKIP_COUNTER
load data from master
show slave status(SUPER,REPLICATION CLIENT)
CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= //动态改变master信息
PURGE MASTER [before ‘date’] 删除master端已同步过的日志
几个跟热备有关的mysql命令:(需要在mysql命令行界面或query )

    * stop slave    #停止同步
    * start slave    #开始同步,从日志终止的位置开始更新。
    * SET SQL_LOG_BIN=0|1 #主机端运行,需要super权限,用来开停日志,随意开停,会造成主机从机数据不一致,造成错误
    * SET GLOBAL SQL_SLAVE_SKIP_COUNTER=n # 客户端运行,用来跳过几个事件,只有当同步进程出现错误而停止的时候才可以执行。
    * RESET MASTER #主机端运行,清除所有的日志,这条命令就是原来的FLUSH MASTER
    * RESET SLAVE   #从机运行,清除日志同步位置标志,并重新生成master.info
      虽然重新生成了master.info,但是并不起用,最好,将从机的mysql进程重启一下,
    * LOAD TABLE tblname FROM MASTER #从机运行,从主机端重读指定的表的数据,每次只能读取一个,受timeout时间限制,需要调整timeout时间。执行这个命令

需要同步账号有 reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout 和 net_write_timeout的值
    * LOAD DATA FROM MASTER #从机执行,从主机端重新读入所有的数据。执行这个命令需要同步账号有reload和super权限。以及对相应的库有select权限。如果表

比较大,要增加net_read_timeout 和 net_write_timeout的值
    * CHANGE MASTER TO master_def_list #在线改变一些主机设置,多个用逗号间隔,比如
      CHANGE MASTER TO
      MASTER_HOST=’master2.mycompany.com’,
      MASTER_USER=’replication’,
      MASTER_PASSWORD=’bigs3cret’
    * MASTER_POS_WAIT() #从机运行
    * SHOW MASTER STATUS #主机运行,看日志导出信息
    * SHOW SLAVE HOSTS #主机运行,看连入的从机的情况。
    * SHOW SLAVE STATUS (slave)
    * SHOW MASTER LOGS (master)
    * SHOW BINLOG EVENTS [ IN ‘logname’ ] [ FROM pos ] [ LIMIT [offset,] rows ]
    * PURGE [MASTER] LOGS TO ‘logname’ ; PURGE [MASTER] LOGS BEFORE ‘date’

针对mysql部分的Magento性能优化

mysql配置优化,充分发挥你的硬件资源,下面的数值要根据你的配置调整

key_buffer_size = 512M
max_allowed_packet = 64M
table_cache = 512
sort_buffer_size = 4M
net_buffer_length = 8K
read_buffer_size = 4M
read_rnd_buffer_size = 2M
myisam_sort_buffer_size = 64M
tmp_table_size = 128M
query_cache_size = 96M
query_cache_type = 1
thread_cache_size = 8
max_connections = 400
wait_timeout = 300

其它的如:

将magento的var目录挂载到内存中,加快读取速度:

mount -t tmpfs -o size=100M,mode=0777 tmpfs var

安装php加速器,如APC,XCACHE,eAccelerator,安装方法参考相关的网站

zen-cart批量将某类产品下架

基与多网站的zen-cart,有时需将一些产品下架,但是一个一个进入手工下架,很麻烦,最方便是能进入网站数据库,直接运行数据库脚本,批量针对某一类产品下架,以下是代码

update  zen_categories c inner join zen_categories_description d  set c.categories_status=0
 where c.categories_id=d.categories_id  and d.categories_name like ‘%产品关键字%’;
update  zen_products c inner join zen_products_description d  set c.products_status=0
 where c.products_id=d.products_id  and d.products_name like ‘%产品关键字%’;