Posts Tagged ‘mysql’

windows下忘记mysql密码解决办法,实验有效

1.关闭正在运行的MySQL;  使用命令:net stop mysql; 可以直接进程里结束MYSQL进程

2.打开DOS窗口,转到mysql\bin目录;  

一般在bin目录里面创建一个批处理1.bat,内容是cmd.exe运行一下即可就切换到当前目录,
3.输入  

mysqld  –skip-grant-tables  

回车。如果没有出现提示信息,那就对了。  

4.再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql\bin目录。  

5.输入mysql回车,如果成功,将出现MySQL提示符 >  

6. 连接权限数据库  

>use mysql;   别忘了最后的分号;

6.改密码:  

> update user set password=password(“123456″) where user=”root”;  

(别忘了最后的分号)  

7.刷新权限(必须的步骤)  

>flush privileges;  

8.退出 关闭命令提示符

9注销计算机 再启动服务,用root 和123456登录mysql

VPS LNMP套件 mysql 运行不起来 错误解决

发现MYSQL链接错误,找了原因,启动的时候出现 如下错误

ERROR! MySQL manager or server PID file could not be found!

找了好久也找不到原因,后来去了VPS控制重启试下,发现空间占用95%,感觉估计可能是空间满了的缘故。后来删除了MYSQL的日志,重新启动发现果然没问题了。

省的麻烦,也不会去看日志,禁用方法为:

 vi /etc/my.cnf把里面的
#log-bin=mysql-bin
#binlog_format=mixed
注释掉,重启mysql服务即可.

MySQL5 绿色应用安装 绿色版

一、下载MySQL
http://www.mysql.org/downloads
二、安装过程
1、解压缩mysql-noinstall-5.0.51b-win32.zip到一个目录。
假定MYSQL_HOME=D:\Dev\mysql-5.0.51

2、编写mysql的运行配置文件my.ini
my.ini
—————————–

[mysqld]
# 设置mysql的安装目录
basedir=$MYSQL_HOME
# 设置mysql数据库的数据的存放目录,必须是data,或者是\\xxx\data
datadir=$MYSQL_HOME\data
# 设置mysql服务器的字符集
default-character-set=utf8

[client]
# 设置mysql客户端的字符集
default-character-set=gbk
—————————–

3、安装mysql服务
从MS-DOS窗口进入目录E:\myserver\mysql-5.0.51-win32\bin,运行如下命令:
mysqld –install MySQL5 –defaults-file=:\Dev\mysql-5.0.51\my.ini

4、启动mysql数据库
还在上面的命令窗口里面,输入命令:net start MySQL5
这样就启动了mysql服务。

5、删除服务
执行mysqld –remove MySQL5即可

MySQL的my.cnf优化实例【转】

在Apache, PHP, MySQL的体系架构中,MySQL对于性能的影响最大,也是关键的核心部分。对于Discuz!论坛程序也是如此,MySQL的设置是否合理优化,直接影响到论坛的速度和承载量!同时,MySQL也是优化难度最大的一个部分,不但需要理解一些MySQL专业知识,同时还需要长时间的观察统计并且根据经验进行判断,然后设置合理的参数。

下面我们了解一下MySQL优化的一些基础,MySQL的优化我分为两个部分,一是服务器物理硬件的优化;二是MySQL自身(my.cnf)的优化。

(1) 服务器硬件对MySQL性能的影响
a) 磁盘寻道能力(磁盘I/O),以目前高转速SCSI硬盘(7200转/秒)为例,这种硬盘理论上每秒寻道7200次,这是物理特性决定的,没有办法改变。 MySQL每秒钟都在进行大量、复杂的查询操作,对磁盘的读写量可想而知。所以,通常认为磁盘I/O是制约MySQL性能的最大因素之一,对于日均访问量在100万PV以上的Discuz!论坛,由于磁盘I/O的制约,MySQL的性能会非常低下!解决这一制约因素可以考虑以下几种解决方案:
使用RAID-0+1磁盘阵列,注意不要尝试使用RAID-5,MySQL在RAID-5磁盘阵列上的效率不会像你期待的那样快;抛弃传统的硬盘,使用速度更快的闪存式存储设备。经过Discuz!公司技术工程的测试,使用闪存式存储设备可比传统硬盘速度高出6-10倍左右。
b) CPU 对于MySQL应用,推荐使用S.M.P.架构的多路对称CPU,例如:可以使用两颗Intel Xeon 3.6GHz的CPU。
c) 物理内存对于一台使用MySQL的Database Server来说,服务器内存建议不要小于2GB,推荐使用4GB以上的物理内存。

(2) MySQL自身因素当解决了上述服务器硬件制约因素后,让我们看看MySQL自身的优化是如何操作的。对MySQL自身的优化主要是对其配置文件my.cnf中的各项参数进行优化调整。下面我们介绍一些对性能影响较大的参数。
由于my.cnf文件的优化设置是与服务器硬件配置息息相关的,因而我们指定一个假想的服务器硬件环境:
CPU: 2颗Intel Xeon 2.4GHz
内存: 4GB DDR
硬盘: SCSI 73GB
下面,我们根据以上硬件配置结合一份已经优化好的my.cnf进行说明:
# vi /etc/my.cnf
以下只列出my.cnf文件中[mysqld]段落中的内容,其他段落内容对MySQL运行性能影响甚微,因而姑且忽略。
  [mysqld]
  port = 3306
  serverid = 1
  socket = /tmp/mysql.sock
  skip-locking
  # 避免MySQL的外部锁定,减少出错几率增强稳定性。
  skip-name-resolve
禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!
back_log = 384
指定MySQL可能的连接数量。当MySQL主线程在很短的时间内接收到非常多的连接请求,该参数生效,主线程花费很短的时间检查连接并且启动一个新线程。
back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。如果系统在一个短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的侦听队列的大小。不同的操作系统在这个队列大小上有它自己的限制。
试图设定back_log高于你的操作系统的限制将是无效的。默认值为50。对于Linux系统推荐设置为小于512的整数。
key_buffer_size = 256M
# key_buffer_size指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。
对于内存在4GB左右的服务器该参数可设置为256M或384M。
注意:该参数值设置的过大反而会是服务器整体效率降低!
max_allowed_packet = 4M
thread_stack = 256K
table_cache = 128K
sort_buffer_size = 6M
查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。所以,对于内存在4GB左右的服务器推荐设置为6-8M。
read_buffer_size = 4M
读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享!
join_buffer_size = 8M
联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享!
myisam_sort_buffer_size = 64M
table_cache = 512
thread_cache_size = 64
query_cache_size = 64M
指定MySQL查询缓冲区的大小。可以通过在MySQL控制台执行以下命令观察:
# > SHOW VARIABLES LIKE ‘%query_cache%’;
# > SHOW STATUS LIKE ‘Qcache%’;
# 如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况;
如果Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓冲;Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多。
tmp_table_size = 256M
max_connections = 768
指定MySQL允许的最大连接进程数。如果在访问论坛时经常出现Too Many Connections的错误提示,则需要增大该参数值。
max_connect_errors = 10000000
wait_timeout = 10
指定一个请求的最大连接时间,对于4GB左右内存的服务器可以设置为5-10。
thread_concurrency = 8
该参数取值为服务器逻辑CPU数量×2,在本例中,服务器有2颗物理CPU,而每颗物理CPU又支持H.T超线程,所以实际取值为4 × 2 = 8
skip-networking
开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项!否则将无法正常连接!

==========================

同时在线访问量继续增大 对于1G内存的服务器 明显感觉到吃力严重时甚至每天都会死机 或者时不时的服务器 卡一下这个问题曾经困扰了我半个多月MySQL使用是很具伸缩性的算法,因此你通常能用很少的内存运行或给MySQL更多的被存以得到更好的性能。

安装好mysql后,配制文件应该在/usr/local/mysql/share /mysql目录中,配制文件有几个,有my-huge.cnf my-medium.cnf my-large.cnf my-small.cnf,不同的流量的网站和不同配制的服务器环境,当然需要有不同的配制文件了。

一般的情况下,my-medium.cnf这个配制文件就能满足我们的大多需要;一般我们会把配置文件拷贝到/etc/my.cnf 只需要修改这个配置文件就可以了,使用mysqladmin variables extended-status –u root –p 可以看到目前的参数,有3个配置参数是最重要的,即key_buffer_size,query_cache_size,table_cache。

key_buffer_size只对MyISAM表起作用,

key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。一般我们设为16M,实际上稍微大一点的站点 这个数字是远远不够的,通过检查状态值Key_read_requests和 Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%’获得)。 或者如果你装了phpmyadmin 可以通过服务器运行状态看到,笔者推荐用phpmyadmin管理mysql,以下的状态值都是本人通过phpmyadmin获得的实例分析:

这个服务器已经运行了20天

key_buffer_size – 128M
key_read_requests – 650759289
key_reads – 79112

比例接近1:8000 健康状况非常好

另外一个估计key_buffer_size的办法 把你网站数据库的每个表的索引所占空间大小加起来看看以此服务器为例:比较大的几个表索引加起来大概125M 这个数字会随着表变大而变大。

从4.0.1开始,MySQL提供了查询缓冲机制。使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中,今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。

通过调节以下几个参数可以知道query_cache_size设置得是否合理

Qcache inserts
Qcache hits
Qcache lowmem prunes
Qcache free blocks
Qcache total blocks

Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,同时 Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小Qcache_hits的值不大,则表明你的查询重复率很低,这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲。

Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多query_cache_type指定是否使用查询缓冲

我设置:

query_cache_size = 32M

query_cache_type= 1

得到如下状态值:

Qcache queries in cache 12737 表明目前缓存的条数

Qcache inserts 20649006

Qcache hits 79060095  看来重复查询率还挺高的

Qcache lowmem prunes 617913 有这么多次出现缓存过低的情况

Qcache not cached 189896   

Qcache free memory 18573912  目前剩余缓存空间

Qcache free blocks 5328 这个数字似乎有点大 碎片不少

Qcache total blocks 30953

如果内存允许32M应该要往上加点

table_cache指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和 Opened_tables,可以决定是否需要增加table_cache的值。如果你发现open_tables等于table_cache,并且 opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用SHOW STATUS LIKE ‘Open%tables’获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。

对于有1G内存的机器,推荐值是128-256。

笔者设置table_cache = 256

得到以下状态:

Open tables 256

Opened tables 9046

虽然open_tables已经等于table_cache,但是相对于服务器运行时间来说,已经运行了20天,opened_tables的值也非常低。因此,增加table_cache的值应该用处不大。如果运行了6个小时就出现上述值那就要考虑增大table_cache。

如果你不需要记录2进制log 就把这个功能关掉,注意关掉以后就不能恢复出问题前的数据了,需要您手动备份,二进制日志包含所有更新数据的语句,其目的是在恢复数据库时用它来把数据尽可能恢复到最后的状态。另外,如果做同步复制( Replication )的话,也需要使用二进制日志传送修改情况。

log_bin指定日志文件,如果不提供文件名,MySQL将自己产生缺省文件名。MySQL会在文件名后面自动添加数字引,每次启动服务时,都会重新生成一个新的二进制文件。此外,使用log-bin-index可以指定索引文件;使用binlog-do-db可以指定记录的数据库;使用binlog-ignore-db可以指定不记录的数据库。注意的是:binlog-do- db和binlog-ignore-db一次只指定一个数据库,指定多个数据库需要多个语句。而且,MySQL会将所有的数据库名称改成小写,在指定数据库时必须全部使用小写名字,否则不会起作用。

关掉这个功能只需要在他前面加上#号

#log-bin

开启慢查询日志( slow query log )

慢查询日志对于跟踪有问题的查询非常有用。它记录所有查过long_query_time的查询,如果需要,还可以记录不使用索引的记录。下面是一个慢查询日志的例子:

开启慢查询日志,需要设置参数log_slow_queries、long_query_times、log-queries-not-using-indexes。

log_slow_queries指定日志文件,如果不提供文件名,MySQL将自己产生缺省文件名。long_query_times指定慢查询的阈值,缺省是10秒。log-queries-not-using-indexes是 4.1.0以后引入的参数,它指示记录不使用索引的查询。笔者设置long_query_time=10

笔者设置:

sort_buffer_size = 1M
max_connections=120
wait_timeout =120
back_log=100
read_buffer_size = 1M
thread_cache=32
interactive_timeout=120
thread_concurrency = 4

参数说明:

back_log

要求MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。 Unix listen(2)系统调用的手册页应该有更多的细节。检查你的OS文档找出这个变量的最大值。试图设定back_log高于你的操作系统的限制将是无效的。

max_connections

并发连接数目最大,120 超过这个值就会自动恢复,出了问题能自动解决

thread_cache

没找到具体说明,不过设置为32后 20天才创建了400多个线程 而以前一天就创建了上千个线程 所以还是有用的

thread_concurrency

#设置为你的cpu数目x2,例如,只有一个cpu,那么thread_concurrency=2

#有2个cpu,那么thread_concurrency=4

skip-innodb

#去掉innodb支持

mysql数据库my.cnf配置文件详解

 MySQL:MySQL-server-community-5.0.85-0.sles10.i586.rpm和MySQL-client-community-5.0.85-0.sles10.i586.rpm

       安装完MySQL后,/etc/my.cnf文件默认是不存在的,可以在/usr/share/doc/packages/MySQL-server-community下找到my-huge.cnf 、my-innodb-heavy-4G.cnf 、my-large.cnf 、my-medium.cnf 、my-small.cnf 等文件.将其中合适你机器配置的文件拷贝到/etc/my.cnf

       my.cnf的详细的说明:

[mysqld]
port = 3306
serverid = 1
socket = /tmp/mysql.sock
skip-locking
# 避免MySQL的外部锁定,减少出错几率增强稳定性。

skip-name-resolve
禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!

back_log = 384
指定MySQL可能的连接数量。当MySQL主线程在很短的时间内接收到非常多的连接请求,该参数生效,主线程花费很短的时间检查连接并且启动一个新线程。
back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。如果系统在一个短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的侦听队列的大小。不同的操作系统在这个队列大小上有它自己的限制。
试图设定back_log高于你的操作系统的限制将是无效的。默认值为50。对于Linux系统推荐设置为小于512的整数。

key_buffer_size = 256M
# key_buffer_size指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。
对于内存在4GB左右的服务器该参数可设置为256M或384M。
注意:该参数值设置的过大反而会是服务器整体效率降低!

max_allowed_packet = 4M
thread_stack = 256K
table_cache = 128K
sort_buffer_size = 6M
查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。所以,对于内存在4GB左右的服务器推荐设置为6-8M。

read_buffer_size = 4M
读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享!

join_buffer_size = 8M
联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享!

myisam_sort_buffer_size = 64M
table_cache = 512
thread_cache_size = 64
query_cache_size = 64M
指定MySQL查询缓冲区的大小。可以通过在MySQL控制台执行以下命令观察:

代码:
# > SHOW VARIABLES LIKE ‘%query_cache%’;
# > SHOW STATUS LIKE ‘Qcache%’;如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况;
如果Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓冲;Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多。

tmp_table_size = 256M
max_connections = 768
指定MySQL允许的最大连接进程数。如果在访问论坛时经常出现Too Many Connections的错误提 示,则需要增大该参数值。

max_connect_errors = 10000000
wait_timeout = 10
指定一个请求的最大连接时间,对于4GB左右内存的服务器可以设置为5-10。

thread_concurrency = 8
该参数取值为服务器逻辑CPU数量×2,在本例中,服务器有2颗物理CPU,而每颗物理CPU又支持H.T超线程,所以实际取值为4 × 2 = 8

skip-networking
开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项!否则将无法正常连接!

mysql日志清理

1、清理mysql遗留的日志文件
首先进入mysql数据库
mysql -u root -p
input password。
mysql>purge master logs to ‘pscenter-in.264’;
这样就可以直接将日志清理完毕,只保留最后一个即可。
清理完毕日志后建议将数据库备份一下。
 
2、将查询结果垂直显示
mysql > select * from module \G;
这样就可以垂直显示数据了。
 
3、将mysql日志进行循环
登录mysql的服务器
mysql > flush logs;
mysql > reset master;
这样就可以将日志文件归整到从001开始了。
 
4、快速备份数据量比较大的库
mysqldump -uroot -pwoaini123984 –opt –quick pscenter(库名) > /var/www/dbback/.pscenter20071228.sql
这样能快速导出数据。达到备份数据库。
###########################################################
1、查看日志
mysql>SHOW MASTER LOGS;
此命令显示目前二进制日志的数目。
然后
mysql> PURGE MASTER LOGS TO ‘binary-log.xxx’;
除了命令中给出的日志之后的外,其他的二进制日志全部删除。
具体如下:
PURGE MASTER LOGS
PURGE { MASTER|BINARY } LOGS TO ‘log_name’
PURGE { MASTER|BINARY } LOGS BEFORE ‘date’
BEFORE变量的date自变量可以为’YYYY-MM-DD hh:mm:ss’格式。MASTER和BINARY是同义词。
  例如:
  PURGE MASTER LOGS TO ‘mysql-bin.010’;
  PURGE MASTER LOGS BEFORE ‘2008-07-12 13:00:00’;
2、清理步骤:
  1. 在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
  2. 使用SHOW MASTER LOGS获得主服务器上的一系列日志。
  3. 在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是更新的,这是清单上的最后一个日志。
  4. 制作您将要删除的所有日志的备份。(这个步骤是自选的,但是建议采用。)
  5. 清理所有的日志,但是不包括目标日志我
3、恢复
使用mysqlbinlog命令恢复日志
 
# mysqlbinlog -d test /root/mysql/mysql-bin.000001|mysql -uroot -ppassword

mysql同步备份

[replyview]
在unix环境下在/etc/mysql/my.cnf 或者在mysql用户的home目录下面的my.cnf。
window环境中,如果c:根目录下有my.cnf文件则取该配置文件。当运行mysql的winmysqladmin.exe工具时候,该工具会把c:根目录下的my.cnf 命名为mycnf.bak。并在winnt目录下创建my.ini。mysql服务器启动时候会读该配置文件。所以可以把my.cnf中的内容拷贝到my.ini文件中,用my.ini文件作为mysql服务器的配置文件。
unix/linux环境下,就修改/etc/mysql/my.cnf然后/usr/local/mysql/share/mysql/mysql server restart就可以了。
我的测试环境:
操作系统:redhat AS 3
mysql:mysql-4.0.17.
A ip:192.168.0.90
 B ip:192.168.0.99

A:设置
1.增加一个用户最为同步的用户帐号:
GRANT all privileges ON *.* TO backup@’192.168.0.99′ IDENTIFIED BY ‘1234’

B:设置
1.增加一个用户最为同步的用户帐号:
GRANT replication slave ON *.* TO backup@’192.168.0.90′ IDENTIFIED BY ‘1234’
说明:上面的all privileges在4.0版上应该为replication slave,也就是grant replication slave on……..在3.23上是file,也就是grant file on ……..但是我怕有别的麻烦,干脆权限全给好啦. 在进行如上设置之后,可以看出在192.168.37.189设定好并重启mysql以后,mysql会在数据目录(/var/lib/mysql)下生成一个master.info文件和relay-log.info,relay-log.index文件.如果要更改master服务器,则要删除掉这个文件,(即在更改了/etc/my.cnf中master相关信息)在my.cnf文件中重新配置,重新启动mysql,更改才会生效.

.主从模式:A->B
A为master
修改A mysql的my.ini文件。在mysqld配置项中加入下面配置:
server-id=1
log-bin
#设置需要记录log 可以设置log-bin=/var/mysqllog 设置日志文件的目录,
#其中mysqllog是日志文件的名称,mysql将建立不同扩展名,文件名为mysqllog的几个日志文件。
binlog-do-db=test #指定需要日志的数据库
这样,mysql会在数据目录放置test这个库的更新日志。等待备机来抓取

重起数据库服务。
用show master status 命令看日志情况。

B为slave
修改B mysql的my.ini文件。在mysqld配置项中加入下面配置:
server-id=2
master-host=192.168.0.90
master-user=backup #同步用户帐号
master-password=1234
master-port=3306
master-connect-retry=10 预设重试间隔10秒
replicate-do-db=test 告诉slave只做backup数据库的更新
log-bin
binlog-do-db=test
客户端会到服务器抓取test库的更新日志,来更新本地的test库

重起数据库
用show slave status看同步配置情况。
注意:由于设置了slave的配置信息,mysql在数据库目录下生成master.info
所以如有要修改相关slave的配置要先删除该文件。否则修改的配置不能生效。

 双机互备模式。
如果在A加入slave设置,在B加入master设置,则可以做B->A的同步。
在A的配置文件中 mysqld 配置项加入以下设置:

master-host=192.168.0.99
master-user=backup
master-password=1234
replicate-do-db=backup
master-connect-retry=10

在B的配置文件中 mysqld 配置项加入以下设置:
log-bin
binlog-do-db=backup
注意:当有错误产生时*.err日志文件。同步的线程退出,当纠正错误后要让同步机制进行工作,运行slave start
重起AB机器,则可以实现双向的热备。
对于故障诊断,我的方法是都在在slave上.那么slave上是如何工作的呢?
Slave上Mysql的Replication工作有两个线程,I/O thread和SQL thread,I/O 的作用是从master 3306端口上把它的binlog取过来(master在被修改了任何内容之后,就会把修改了什么写到自己的binlog等待slave更新),然后写到本地的relay-log,而SQL thread则是去读本地的relay-log,再把它转换成本Mysql所能理解的东西,于是同步就这样一步一步的完成.决定I/O thread的是/var/lib/mysql/master.info,而决定SQL thread的是/var/lib/mysql/relay-log.info.
请注意,因为上边提到了binlog里的内容是改了什么东东,而不是改了以后是什么东东,所以在进行同步之前必须保证两个数据库是完全相同的,不然可能出错.打个比方来说.A机上有一个表里的元组为2,而操作是减一,则binlog只会记录减一这个操作,如果B机上没有,那么则无法得到同步,因为B机没有这个字段,就不知道减一是什么操作.

对于故障诊断,我的方法是都在slave(master/slave是相对的)的mysql(指客户端)里完成.
方法一:show slave status;
正确情况下应该同如下类似:
mysql> show slave status;
+————–+————-+————-+—————+——————– –+———————+———————-+—————+—————- ——-+——————+——————-+—————–+————— ——+————+————+————–+———————+———- ——-+
| Master_Host | Master_User | Master_Port | Connect_retry | Master_Log_File | Read_Master_Log_Pos | Relay_Log_File | Relay_Log_Pos | Relay_Master_Lo g_File | Slave_IO_Running | Slave_SQL_Running | Replicate_do_db | Replicate_igno re_db | Last_errno | Last_error | Skip_counter | Exec_master_log_pos | Relay_log _space |
+————–+————-+————-+—————+——————– –+———————+———————-+—————+—————- ——-+——————+——————-+—————–+————— ——+————+————+————–+———————+———- ——-+
| 192.168.0.90 | backup | 3306 | 10 | localserver1-bin.00 1 | 957 | server-relay-bin.005 | 613 | localserver1-bi n.001 | Yes | Yes | test | | 0 | | 0 | 957 | 613 |
+————–+————-+————-+—————+——————– –+———————+———————-+—————+—————- ——-+——————+——————-+—————–+————— ——+————+————+————–+———————+———- ——-+
1 row in set (0.00 sec)
上边的server1和Server是两台机器的主机名,所以真实情况应该有所分别,注意其中的YES|YES,这个是本地I/O线程及SQL线程的工作状态,要确
保都为YES,如果不是YES,请检查mysql是否正常运行.
方法二:show processlist;
如果正确,则应该如下所示:
mysql> show processlist;
+—-+————-+———–+——+———+————+———————————————————————–+——————+
| Id | User | Host | db | Command | Time | State | Info |
+—-+————-+———–+——+———+————+———————————————————————–+——————+
| 1 | system user | | NULL | Connect | 2511 | Waiting for master to send event | NULL |
| 2 | system user | | NULL | Connect | 4294906139 | Has read all relay log; waiting for the I/O slave thread to update it | NULL |
| 3 | root | localhost | test | Query | 0 | NULL | show processlist |
| 4 | root | localhost | test | Sleep | 1478 | | NULL |
+—-+————-+———–+——+———+————+———————————————————————–+——————+
4 rows in set (0.00 sec)

注意同标记过的字符类似,则是正确的,错误情况下应该是这个样子:
mysql> show processlist;
+—-+————-+———–+——+———+——+——————————————————————–
—+——————+
| Id | User | Host | db | Command | Time | State | Info |
+—-+————-+———–+——+———+——+——————————————————————–
—+——————+
| 4 | system user | | NULL | Connect | 454 | Reconnecting after a failed master event read | NULL |
| 5 | system user | | NULL | Connect | 454 | Has read all relay log; waiting for the I/O slave thread to update it | NULL |
| 7 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+—-+————-+———–+——+———+——+——————————————————————–
—+——————+
3 rows in set (0.00 sec)
当然如果这里的Reconnecting只是错误的一种,有可能是connecting,则表示正在连接,那么请检查:
1 master上的mysql daemon是否正常运行
2 master与slave的网络连接是否正常
3 my.cnf是否配置正确
4 在修改配置后是否删除过master.info?(删掉以后会自动再生成一个,别担心删掉),因为如果不删掉的话,那么则还是使用原来的配置
5 修改配置后有没有重新启动mysql daemon,重新启动过程后必须证实mysql已经正常启动
6 master上给slave及slave给master上分配的replication用户权限是否正确,master的主机名和dns设置
7 当前状况两台数据库是否完全相同.
方法三:show master status;
mysql> show master status;
+—————-+———-+————–+——————+
| File | Position | Binlog_do_db | Binlog_ignore_db |
+—————-+———-+————–+——————+
| Server1-bin.021 | 79 |test | |
+—————-+———-+————–+——————+
1 row in set (0.00 sec)
注意上边的这条,position不能为0,如果为0则表示有问题,请检查/etc/my.cnf中的server-id及是否打开log-bin
mysql> show processlist;
+—-+——–+———————+——+————-+——+———————————————————–
—–+——————+
| Id | User | Host | db | Command | Time | State | Info |
+—-+——–+———————+——+————-+——+———————————————————–
—–+——————+
| 1 | backup | 192.168.0.99:32996 | NULL | Binlog Dump | 284 | Has sent all binlog to slave; waiting for binlog to be
updated | NULL |
| 3 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+—-+——–+———————+——+————-+——+———————————————————–
—–+——————+
2 rows in set (0.00 sec)
如果master上不是这样,那么就应该是master的配置有问题啦.

方法四 查看错误日志
在 /usr/local/mysql/var下有个 localhost.err 文件,所有的错误都在其中被记录

 

 

 

 

      对于大容量的数据库来说。用户当然想每一个时刻都备份所有数据,保证数据库的备份完整性,以免以外情况下,丢失的原数据库内容时候可以做到完全备份,把损失减低到最小。

一般来说,很多人都用直接把数据库或者表备份到一个文件,而且是每周一次或者是每天一次,当数据库或者是表非常大的时候,一次备份的时间就需要很长了,而且有时候也要人工操作。理想的方法当然是自动完成而且是不需要用户手工操作。下面介绍一个方法,实时备份(也叫增量备份)。

mysql4.0+版本和mysql5.0+版本操作有些不同。
1、对于mysql4.0+
   首先在C:盘的windows文件夹里面找到my.ini配置文件。
   里面的内容通常为如下:
#This File was made using the WinMySQLAdmin 1.4 Tool
#2007-4-11 15:17:00

#Uncomment or Add only the keys that you know how works.
#Read the MySQL Manual for instructions

[mysqld]
basedir=C:/mysql
#bind-address=192.168.1.5
datadir=C:/mysql/data
#language=C:/mysql/share/your language directory
#slow query log#=
#tmpdir#=
#port=3306
#set-variable=key_buffer=16M
log-update=f:\update
[WinMySQLadmin]
Server=C:/mysql/bin/mysqld-nt.exe
user=iouioupp(自定义的)
password=iouioupp(自定义的)

上面的配置文件说明了我的mysql数据库装在c:盘里面,接着我们只需要在[mysqld]项目下面增加一条语句就可以实现增量备份了。
#This File was made using the WinMySQLAdmin 1.4 Tool
#2007-4-11 15:17:00

#Uncomment or Add only the keys that you know how works.
#Read the MySQL Manual for instructions

[mysqld]
log-update=f:\update
basedir=C:/mysql
#bind-address=192.168.1.5
datadir=C:/mysql/data
#language=C:/mysql/share/your language directory
#slow query log#=
#tmpdir#=
#port=3306
#set-variable=key_buffer=16M
log-update=f:\update
[WinMySQLadmin]
Server=C:/mysql/bin/mysqld-nt.exe
user=iouioupp(自定义的)
password=iouioupp(自定义的)

请注意看紫红色的语句(它就是了)。
输入后,你可以重启电脑,或者启动任务管理器,把mysqld-nt终止进程。
前者重启电脑后会自动启动mysql服务器,后者需要你重新启动这个程序c:\mysql\bin\mysqladmin

然后,你就可以看到f:盘根目录下多了一个文件,名为update.00001,如果你一直使用着这个mysql服务器,那么这个文件就记录了mysql里面所有的数据库的表的变化(查询语句不包括)。

这种方法是最方便和最快捷的实时备份。

当然,你现在会想到如果mysql服务器真的出现意外时候,应该怎么还原呢?
看下面:

在你实行增量备份时,应该备份一次整个msyql的所有数据库(其实最简单的方法就是复制data文件夹)。
之后所有的变化都会出现在update.00001…………update.00002……………里面了,为什么有这么多的update.0000x呢?
因为每次重启电脑都会相应的增加一个更新的增量备份文件。

如果真的出现数据库意外时候,那就在msyql数据库里面删除所有资料,接着把原来复制出来的data文件夹粘贴到原来位置,接着就是执行所有的update.0000x文件。最后就完成了。

你还可以每一次关机之前都备份一次mysql里面的所有数据库,那么当出现意外时候,只需要还原最后一次的update.0000x文件就行了。

还原update.0000x文件用以下语句:mysqladmin -u -p flush-logs 
 

MySQL的mysqldump工具导入导出数据库

1.导出整个数据库(Dos下)

mysqldump -u 用户名 -p 数据库名 > 导出的文件名

mysqldump -u chai -p smgp_apps_wcnc > chai.sql

2.导出一个表

mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

mysqldump -u chai   -p smgp_apps_wcnc users>chai.sql

3.导出一个数据库结构

mysqldump -u chai -p -d –add-drop-table smgp_apps_wcnc >d:\chai.sql

-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

4.导入数据库

常用source 命令

进入mysql数据库控制台,

如mysql -u root -p

  

mysql>use 数据库

然后使用source命令,后面参数为脚本文件(如这里用到的.sql)

mysql>source d:\chai.sql

——————-

MySQL导入大SQL文件

五一放个假都不安心,一个库有1.4G,在从服务器上导出只有一半,主服务器上登陆不了,用PM也只能导出一半,想了两天法子了,要ROOT密码要不到,没办法了,只有跳过ROOT密码,然后再更改为只有自己知道的密码。

1. 關閉 MySQL 伺服器。

2. 用以下指令啟動 MySQL,以跳過檢查權限的資料表

mysqld_safe –skip-grant-tables &<

3. 現在己經可以用空密碼進入 MySQL

mysql -u root

4. 進入 MySQL 後執行以下指令更改 mysql root 密碼:

mysql> update mysql.user set password=PASSWORD(”new_password”) where User=’root’;

mysql> flush privileges;

mysql> quit

5. 最後只需重新啟動 MySQL,便可以用新設定的密碼進入了。

mysql -uroot -pyourpassword yourdatabasename < /paths/sqlfile.sql (文件太大可在后面加个&)==========================================================================================

Too many connections

1.可能是mysql的max connections设置的问题
2.可能是多次insert,update操作没有关闭session,需要在spring里配置transaction支持。

解决:
1.修改tomcat里的session 的time-out时间减少为20,(不是必改项)
2.对处理量大的对数据库insert或update的操作提供transaction支持.

原因:

因为你的mysql安装目录下的my.ini中设定的并发连接数太少或者系统繁忙导致连接数被占满

解决方式:

打开MYSQL安装目录打开MY.INI找到max_connections(在大约第93行)默认是100 一般设置到500~1000比较合适,重启mysql,这样1040错误就解决啦。
max_connections=1000
 

Lost connection to MySQL server during query

一个网站远程连MYSQL数据库,来是出现 Lost connection to MySQL server during query 这个问题,经过搜索好久都没解决这个问题,主要是其他同样的程序连接同样的数据库都能正常,但是就一个站不行。后来经过一次次的逐步试验,终于解决问题、。。

[mysqld]项下添加参数:
skip-name-resolve

后来果真好了。