您的位置:首页 > 数据库 > MySQL

31 Mysql常见问题和应用技巧

2013-03-28 21:54 423 查看
1.忘记Mysql的root密码
A.登陆到数据库所在服务器,手工kill掉mysql进程

Shell> Kill `cat /mysql-data-direcroty/hostname.pid`

其中.pid里面有Mysql服务的进程号.
B.使用--skip-grant-tables选项重启mysql服务

Shell> mysqld_safe --skip-grant-tables --user=xz &

Shell> starting mysqld daemon with databases from /home/zxx/mysql/data
C.用空密码的root用户连接到mysql,并且更改root密码

Shell> mysql -uroot

Mysql> update user set password=password('new') where user = 'root' and host = 'localhost' ;
D.刷新权限表,使得权限认证重新生效

Mysql> flush privileges;

2.如何处理Myisam存储引擎的表损坏
如果经常使用mysql,可能会遇到myisam存储引擎的表损坏的情况.一张损坏的表的症状通常是查询意外中断并且能看到下述错误:
tab_name.frm被锁定不能更改;不能找到文件tab_name.myi;文件意外结束;记录文件被毁坏;从表处理器得到错误nnn.
解决方法一:使用mysql自带的myisamchk工具修复.

Myisamchk -r tablename或myisamchk -o tablename
解决方法二:使用mysql的check table 和 repair table命令一起进行修复.

Mysql> Check table table_name;

Mysql> repair table table_name;

3.数据目录磁盘空间不足的问题
对于Myisam表,在建表时可以用如下选项分别指定数据目录和索引目录存储到不同的磁盘空间,而默认会同时放在数据目录下:
Data directory = '绝对路径'
Index directory = '绝对路径'
例如:mysql> create table xiaozhe(id int , name char(40))

->data directory = '/var/lib/mysql/data'

->index directory = '/var/lib/mysql/index' ;

对于InnoDB表,因为索引文件和数据文件是放在一起的,所以当磁盘空间不足时,可以使用参数innodb_data_file_path来增加此文件,路径必须为绝对路径.
例如:如果/home下空间不足,希望在/home1下增加一个可自动扩充的数据文件,那么参数可以这么写Innodb_data_file_path = /home/ibdata1:2000M;/home1/ibdata2:2000M:autoextend

4.Mysql.sock丢失后如何连接数据库
在mysql服务器本机连接数据库时经常会出现mysql.sock不存在,因为如果指定localhost作为主机名,则mysqladmin默认使用unix套接字文件连接(mysql.sock)而不是tcp/ip.这时我们可以通过选项--protocol= tcp | socket | pipe | memory 选项来显示指定连接协议.
Shell> mysql --protocol=tcp -hlocalhost -uroot -p

5.同一台服务器运行多个mysql数据库
将每个mysql安装在不同的用户下面,例如mysql1和mysql2,在每个用户下面执行如下操作:
Shell> export MYSQL_HOME = /home/mysql1/mysql
Shell> groupadd mysql
Shell> useradd -g mysql mysql1
Shell> cd /home/mysql1
Shell> tar -xvzf /home/mysql1/mysql-VERSION-os.tar.gz
Shell> ln -s mysql-VERSION-os.tar.gz mysql
Shell> cd mysql
Shell> cp support-files/my-large.cnf ./my.cnf
修改配置文件,主要修改[client]和[mysqld]下面的port和socket,并指定字符集.如
[client]
Port = 3307
Socket = /home/mysql1/mysql/data/mysql.sock
[mysqld]
Default-character-set=utf8
Port = 3307
Socket = /home/mysql1/mysql/data/mysql.sock

然后执行加载数据库
Shell> scripts/mysql_install_db --user=mysql1
Shell> chown -R root:mysql
Shell> chown -R mysql1:mysql data
Shell> bin/mysql_safe --user=mysql1 &
Mysql2用户执行和mysql1类似,区别在于指定不同的MYSQL_HOME以及不同的port和socket.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: