搜档网
当前位置:搜档网 › 自己总结的Mysql安装及错误处理

自己总结的Mysql安装及错误处理


一: mysql 安装:
先卸载寄存的版本:rpm -qa|grep mysql,查找相关的包,然后依次卸载。
rpm –e msql… 如果卸载不掉,用--nodeps命令。
即:rmp –e mysql… --nodeps
mysql安装:5.5.34。安装文件:/home/
需要安装:server,client,devel,shared。
使用rpm -ivh安装。
安装完成,启动mysql服务: /etc/ init.d/mysql start
如出现以下异常:
Starting MySQL..The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid
则ps -ef|grep mysqld ,居然发现服务器里有一个僵尸进程mysqld,启动kill -9 进程号
然后重新启动mysql,一切恢复正常。

二:配置Mysql:
默认安装的mysql没有密码,所以首先用根用户进入:mysql -u root
设置根用户密码主要有以下几种方法:
(1).mysql> GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY "123456";
把123456设为root用户的密码。
(2).也可以mysqladmin -u root password yourpassword使用这个命令设置。
这样的话,就设置好了MySQL中的root用户密码了,然后就用root用户建立你所需要的数据库。
设置好密码之后,进入mysql,使用命令:mysql -u root -p.

指定数据库给指定用户、机器登陆使用。
以sg921为例:
mysql>CREATE DATABASE sungnet921; (注意设置字符编码)
mysql>GRANT ALL PRIVILEGES ON sungnet921.* TO sg921@”%” IDENTIFIED BY " sg921";
这样就建立了一个sg921的用户,它对数据库sg921有着全部权限。以后就用sg921来对sg921数据库进行管理,而无需要再用root用户了,而该用户的权限也只被限定在sg921数据库中。
如果想进行远程访问或控制,那么你要做两件事:
其一:
mysql>GRANT ALL PRIVILEGES ON xoops.* TO xoops_root@"%" IDENTIFIED BY "654321";
允许xoops_root用户可以从任意机器上登入MySQL。
其二:
vi /etc/mysql/https://www.sodocs.net/doc/4d7815167.html,f
老的版本中
>skip-networking => # skip-networking
新的版本中
>bind-address=127.0.0.1 => bind-address= 你机器的IP
这样就可以允许其他机器访问MySQL了。
如果连不上,可能是防火墙没关,需要service iptables stop
LINUX: 大小写敏感设置
编辑/etc/https://www.sodocs.net/doc/4d7815167.html,f文件,在[mysqld]节下 添加 lower_case_table_names=1 参数,并设置相应的值 (备注:为0时大小写敏感,为1时大小写不敏感,默认为0)。

PHP远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常,出现这种问题的主要原因是,默认安装的MYSQL开启了DNS的反向解析,在MY.INI(WINDOWS系统下)或https://www.sodocs.net/doc/4d7815167.html,F(UNIX或LINUX系统下)文件的[mysqld]下加入skip-name-resolve这一句。连接mysql速度慢的解决方法.

配置超时时间
如果在配置文件https://www.sodocs.net/doc/4d7815167.html,f中只设置参数wait_timeout=100,则重启服务器后进入,执行:
Mysql> show variables like “%timeout%”;
会发现参数设置并未生效,仍然为28800(即默认的

8个小时)。
查询资料后,要同时设置interactive_timeout和wait_timeout才会生效。
【因此,只需要对MySQL的配置文件进行修改就可以了。
1.Windows下,配置文件路径为MySQL安装的根目录中。my.ini
2.Linux系统下,配置文件为路径/etc/https://www.sodocs.net/doc/4d7815167.html,f
文件中加入
Configuration代码
1. [mysqld]
2. wait_timeout=20
3. interactive_timeout=20

保存退出,重启mysql服务。



三:Mysql基本操作:
(1)、mysql服务操作
启动mysql:/etc/rc.d/init.d/mysql start
0、查看数据库版本 sql-> status;
1、net start mysql //启动mysql服务
2、net stop mysql //停止mysql服务
3、mysql -h主机地址 -u用户名 -p用户密码 //进入mysql数据库
4、quit //退出mysql操作
5、mysqladmin -u用户名 -p旧密码 password 新密码 //更改密码
6、grant select on 数据库.* to 用户名@登录主机 identified by "密码" //增加新用户
exemple:
例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作 (localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据 库,只能通过MYSQL主机上的web页来访问了。
grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc";
如果你不想test2有密码,可以再打一个命令将密码消掉。
grant select,insert,update,delete on mydb.* to test2@localhost identified by "";

(2)、数据库操作
1、show databases; //列出数据库
2、use database_name //使用database_name数据库
3、create database data_name //创建名为data_name的数据库
4、drop database data_name //删除一个名为data_name的数据库

(3)、表操作
1、show databases;//列出所有数据库
use 数据库名; //到达某一数据库
show tables //列出所有表
create table tab_name(
id int(10) not null auto_increment primary key,
name varchar(40),
pwd varchar(40)
) charset=utf8; 创建一个名为tab_name的新表
2、drop table tab_name 删除名为tab_name的数据表
3、describe tab_name //显示名为tab_name的表的数据结构
4、show columns from tab_name //同上
5、delete from tab_name //将表tab_name中的记录清空
6、select * from tab_name //显示表tab_name中的记录
7、mysqldump -uUSER -pPASSWORD --no-data DATABASE TABLE > table.sql //复制表结构

(4)、修改表结构
1、 ALTER TABLE tab_name ADD PRIMARY KEY (col_name)
说明:更改表得的定义把某个栏位设为主键。
2、ALTER TABLE tab_name DROP PRIMARY KEY (col_name)
说明:把主键的定义删除
3、 alter table tab_name add col_name varchar(20); //在tab_name表中增加一个名为col_name的字段且类型为varchar(20)
4、alter table tab_name drop col_name //在tab_name

中将col_name字段删除
5、alter table tab_name modify col_name varchar(40) not null //修改字段属性,注若加上not null则要求原字段下没有数据
SQL Server200下的写法是:Alter Table table_name Alter Column col_name varchar(30) not null;
6、如何修改表名:alter table tab_name rename to new_tab_name
7、如何修改字段名:alter table tab_name change old_col new_col varchar(40); //必须为当前字段指定数据类型等属性,否则不能修改
8、create table new_tab_name like old_tab_name //用一个已存在的表来建新表,但不包含旧表的数据

(5)、数据的备份与恢复
导入外部数据文本:
1.执行外部的sql脚本
当前数据库上执行:mysql < input.sql
指定数据库上执行:mysql [表名] < input.sql
2.数据传入命令 load data local infile "[文件名]" into table [表名];
备份数据库:(dos下)
mysqldump --opt school>school.bbb
mysqldump -u [user] -p [password] databasename > filename (备份)
mysql -u [user] -p [password] databasename < filename (恢复)


四:字符集编码注意事项:
1. 设置MySQL字符编码为utf8。
vi /etc/https://www.sodocs.net/doc/4d7815167.html,f。如果https://www.sodocs.net/doc/4d7815167.html,f 不存在,则查找Mysql的cnf文件位置:可能在以下几个位置中/usr/share/mysql/https://www.sodocs.net/doc/4d7815167.html,f
/usr/share/mysql/https://www.sodocs.net/doc/4d7815167.html,f
/usr/share/mysql/https://www.sodocs.net/doc/4d7815167.html,f
/usr/share/mysql/https://www.sodocs.net/doc/4d7815167.html,f
/usr/share/mysql/https://www.sodocs.net/doc/4d7815167.html,f
/usr/share/texmf/web2c/https://www.sodocs.net/doc/4d7815167.html,f
/usr/share/texmf/web2c/https://www.sodocs.net/doc/4d7815167.html,f
/usr/share/texmf/web2c/https://www.sodocs.net/doc/4d7815167.html,f
/usr/share/texmf/tex/xmltex/https://www.sodocs.net/doc/4d7815167.html,f
/usr/share/texmf/tex/jadetex/https://www.sodocs.net/doc/4d7815167.html,f
/usr/share/doc/MySQL-server-community-5.1.22/https://www.sodocs.net/doc/4d7815167.html,f
/usr/share/doc/MySQL-server-community-5.1.22/https://www.sodocs.net/doc/4d7815167.html,f
/usr/share/doc/MySQL-server-community-5.1.22/https://www.sodocs.net/doc/4d7815167.html,f
/usr/share/doc/MySQL-server-community-5.1.22/https://www.sodocs.net/doc/4d7815167.html,f
/usr/share/doc/MySQL-server-community-5.1.22/https://www.sodocs.net/doc/4d7815167.html,f
然后拷贝 https://www.sodocs.net/doc/4d7815167.html,f、https://www.sodocs.net/doc/4d7815167.html,f、https://www.sodocs.net/doc/4d7815167.html,f、https://www.sodocs.net/doc/4d7815167.html,f其中的一个到/etc下,命名为https://www.sodocs.net/doc/4d7815167.html,f。cp /usr/share/mysql/https://www.sodocs.net/doc/4d7815167.html,f /etc/https://www.sodocs.net/doc/4d7815167.html,f
2. 修改https://www.sodocs.net/doc/4d7815167.html,f
vi /etc/https://www.sodocs.net/doc/4d7815167.html,f
在[client]下添加
default-character-set=utf8
在[mysqld]下添加
character-set-server = utf8
3.重新启动MySQL
[root@bogon ~]# /etc/rc.d/init.d/mysql restart
Shutting down MySQL [ 确定 ]
Starting MySQL. [ 确定 ]
[root@bogon ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.22-rc-community-log MySQL Community Edition (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
4.查看字符集设置
mysql> show variables like 'collation_%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database

| utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.02 sec)
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.02 sec)
mysql>
其他的一些设置方法: 修改数据库的字符集
mysql>use mydb mysql>alter database mydb character set utf-8;

创建数据库指定数据库的字符集 mysql>create database mydb character set utf-8;
通过配置文件修改:
修改/var/lib/mysql/mydb/db.opt
default-character-set=latin1
default-collation=latin1_swedish_ci

default-character-set=utf8
default-collation=utf8_general_ci
重起MySQL:
[root@bogon ~]# /etc/rc.d/init.d/mysql restart
通过MySQL命令行修改:
mysql> set character_set_client=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_connection=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_database=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_results=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_server=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_system=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> set collation_connection=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> set collation_database=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> set collation_server=utf8;
Query OK, 0 rows affected (0.01 sec)

查看:
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.03 sec)
mysql> show variables like 'collation_%';
+----------------------+-----------

------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.04 sec)
-------------------------------------------------------------------------


附录:C API 编程
gcc $(mysql_config --cflags) mysql.c -o mysql $(mysql_config --libs)
gcc -o mysql mysql.c -lmysqlclient -I /usr/include/mysql/ -L /usr/lib64/mysql/*.a

当插入的字符串在数据库显示乱码的时候,虽然可能数据库与要插入的中文都是utf-8编码,但是仍然可能存在乱码现象,可以在mysql_real_connect之后,加入语句:
mysql_query(&mysql,"SET NAMES UTF8")。
SET NAMES ‘charset_name’
SET NAMES显示客户端发送的SQL语句中使用什么字符集。因此,SET NAMES ' charset_name’'语句告诉服务器将来从这个客户端传来的信息采用字符集charset_name’”。它还为服务器发送回客户端的结果指定了字符集。(例如,如果你使用一个SELECT语句,它表示列值使用了什么字符集。

对数据库基本操作的demo程序。
注意:对error2006及2013的处理,以及对没有更新数据库的判断。
例如:
bool DataBase::queryMysql(char *sql)
{
/*
下列2种连接丢失的错误需要重新连接处理
Error: 2006 (CR_SERVER_GONE_ERROR)
Message: MySQL server has gone away
Error: 2013 (CR_SERVER_LOST)
Message: Lost connection to MySQL server during query
*/
bool bret = true;
// MYSQL_RES *result = NULL;
// unsigned int num_fields;
unsigned int num_rows;

if(mysql_query(&mysql, sql))
{
int i = mysql_errno(&mysql);
if( i == 2006 || i == 2013 )
{
bret = DataBase::connect();
if(bret)
{
bret = mysql_query(&mysql, sql);
INFO_VLOG("Database Reconnect success!!!!!!!!!!!!!!!!!!!!!! error no %d",i);
num_rows = mysql_affected_rows(&mysql);
if(num_rows)
return true;
else
return false;
}
ERROR_LOG("Database Reconnect failed!!!!!!");
return bret;
}
else
{
return false;
}
}
//判断是否更新了数据库
num_rows = mysql_affected_rows(&mysql);
if(num_rows)
return true;

return false;
}
如果编译出现
Here's what I had:

/usr/bin/ld: cannot find -lXxf86vm 2008

RPM insisted that libXxf86vm was installed. When I looked at the directory, I saw this:

#> ll /usr/lib64/ | grep Xxf86vm
libXxf86vm.so.1 -> libXxf86vm.so.1.0.0
libXxf86vm.so.1.0.0

It turns out the RPM installer didn't set a symbolic link. I did this:

cd /usr/lib64
ln -s ./libXxf86vm.so.1 ./libXxf86vm.so

and I was off to the races.
即:ln -s /usr/lib64/libmysqlclient.so.16 /usr/lib64/libmysqlclient.so

相关主题