痛定思痛,终得成功
1 mysql 安装过程简述:
1 rpm 安装 server 和client
目录:/usr/share/mysql/ 或者 /usr/lib/mysql/ 或者 /var/lib/mysql/
通过 whereis mysql可以找到mysql所有安装目录
2 创建组和 用户
3 chown 将安装目录给予 mysql用户 和组
4 初始化表 /usr/bin/mysql_install_db --user=mysql
5 service mysql start 启动mysql
/usr/bin/mysqld_safe & 启动守护线程
6 初始密码为空,修改root密码。 root 用户不能远程登录,需要重新创建远程用户并给予相应的权限。
2 mysql详细安装步骤
一、官方网站下载mysql服务器
地址:http://dev.mysql.com/downloads/mysql/#downloads
镜像下载地址:http://mirrors.sohu.com/
官网有很多版本:
1. MySQL Community Server 社区版本,开源免费,但不提供官方技术支持,通常自己测试用这个,根据不同操作系统下载相应版本即可。
2. MySQL Enterprise Edition 企业版本,需付费,可以试用30天。
3. MySQL Cluster 集群版,开源免费。可将几个MySQL Server封装成一个Server。
4. MySQL Cluster CGE 高级集群版,需付费。
5. MySQL Workbench(GUI TOOL)一款专为MySQL设计的ER/数据库建模工具。
二、rpm来安装
首先查看是否安装了mysql rpm -qa | grep MySQL,如果存在的话用rpm命令卸载(rpm -e )
然后安装
rpm -ivh MySQL-server-5.5.28-1.rhel5.i386.rpm
rpm -ivh MySQL-client-5.5.28-1.rhel5.i386.rpm
三、 将mysql安装目录赋予权限chown
/usr/share/mysql
/var/lib/mysql/
如:chown -R mysql:mysql /var/lib/mysql/
chown -R mysql:mysql /usr/share/mysql
四、输入mysql命令提示错误 Can't connect to local MySQL server,是服务没有启动
service mysql start
五、如果不能启动查看日志文件错误,my.cnf中有日志文件的配置位置
可能异常:
1)/usr/sbin/mysqld: File '/var/lib/mysql-bin.index' not found (Errcode: 13)
错误13意思是没有权限,给/var/lib一个权限777 ,让mysql可以创建上面的文件,如果还是不能创建,可以自己手动创建
chmod 777 /var/lib
2) Can't open the mysql.plugin table. Please run mysql_upgrade to create
需要初始化表:命令:/usr/bin/mysql_install_db
3)Fatal error: Can't open and lock privilege tables: Unknown collation '#46' in table 'host' definition
低版本服务,用了高版本的表
删掉数据库目录
rm -rf /var/lib/mysql/*
重新初始化表:
/usr/bin/mysql_install_db
六、执行启动命令service mysql start可以启动
3 mysql配置过程:
1 my.cnf
rpm包安装的Mysql不会自动安装/etc/my.cnf文件,需要自己到/usr/share/mysql目录中
拷贝my-huge.cnf或 my-medium.cnf或 my-small.cnf为my.cnf即可
在[mysqld]下面添加下面两个配置(如果运行时找不到log文件,可能是mysql用户没有创建文件的权限,则需要给权限):
datadir=/var/lib/mysql
log-bin=/var/lib/mysql-bin.log
2 设置密码
首次安装时,默认密码为空,需要重新设置密码。
命令:/usr/bin/mysqladmin -u root password 新密码XXXXX
例如: /usr/bin/mysqladmin -u root password 123456
登陆:mysql -u root –p新密码XXXXX
3 安装目录说明:
/usr/share/mysql(mysql.server命令及配置文件)
/usr/bin(mysqladmin mysqldump等命令)
/etc/rc.d/init.d/(启动脚本文件,mysql的目录)
4 数据库的启动与停止
启动:MySQL安装完成后启动文件mysql在/etc/init.d目录下,在需要启动时运行下面命令即可
启动:/etc/init.d/mysql start 或 /etc/rc.d/init.d/mysql start
重启:/etc/init.d/mysql restart
停止:/etc/init.d/mysql stop 或 /usr/bin/mysqladmin -u root -p shutdown
5 配置远程访问
处于安全考虑,Mysql默认是不允许远程访问的,可以使用下面开启远程访问
//赋予任何主机访问数据的权限
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION
上面不好用则使用:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; 带有密码的。
//使修改生效
mysql>FLUSH PRIVILEGES
6 客户端连接服务器的时候错误:解决root不能远程登录问题
错误:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
解决1:增加一个用户(有这个用户了 直接更新密码就行了),用户名为system,密码为manager。注意要使用PASSWORD函数,然后还要使用FLUSH,PRIVILEGES来执行确认。
用root用户登陆后执行下面sql,然后刷新用新添加的用户登陆数据库即可。
INSERT INTO mysql.user (Host,User,Password) VALUES ('%','system', PASSWORD('manager')); //有些版本不能用,因为有其他的字段不能为空
可以: CREATE USER 'system'@'%' IDENTIFIED BY "123"; system为用户名 123为密码 %表示任何ip地址能都使用该用户访问数据库
mysql> FLUSH PRIVILEGES
给system用户赋予所有操作权限,否则用户什么也做不了:
grant all privileges on *.* to system@'%' identified by '密码'; flush privileges
方法2步骤:解决root用户不能本地登录问题
# /etc/init.d/mysql stop
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root' and host='root' or host='localhost';//把空的用户密码都修改成非空的密码就行了。
mysql> FLUSH PRIVILEGES;
mysql> quit
# /etc/init.d/mysqld restart
# mysql -uroot -p
Enter password: <输入新设的密码newpassword>
4 乱码问题 :通过程序追加到数据库中的数据时乱码
解决:1 ) 修改程序编码为utf-8 2) 修改数据库连接为utf-8 3) 修改数据库、表、表中字段编码为utf-8
jdbc:mysql://localhost/mytest?useUnicode=true&characterEncoding=utf-8
5 数据库的导出
1、导出数据库为test下面表名为b的数据
mysqldump -uroot -h 127.0.0.1 test b > b_test.sql
2、导出数据库为test的所有数据
mysqldump -uroot -h 127.0.0.1 test >test.sql
3、导出数据库名为test和retail的数据库
mysqldump -uroot -h 127.0.0.1 -B test retail > /data/db.sql
4、导出所有的数据库
mysqldump -uroot -h127.0.0.1 -A > /data/all.sql
5、导出数据库的结构(以上脚本添加选项 -d)
mysqldump -uroot -h 127.0.0.1 test b -d> b_test.sql
6、从一个机器的v3_content数据库导入到另一个机器得v3_content数据库
从192.168.0.231机器得test_content数据库导入到192.168.0.102机器得test_content数据库
mysqldump -h192.168.0.231 -uroot -p123456 test_content| mysql -h192.168.0.102 -usystem -p123456 test_content
7 从content(带有查询条件) 中只导出表app_book_repack 中的数据 (-t换成-d则只导出数据库的表结构,都不加则结构和数据都有 )
mysqldump -uroot -p --default-character-set=utf8 -t content app_book_repack --where="s_state=1" > /opt/app_book_repack.sql
导入 mysql> source /opt/app_book_repack.sql
6 显示正在执行或者等待中的SQL
SHOW PROCESSLIST
EXPLAIN SELECT * FROM t_reg_code 分析表的执行计划
7 今天遇到数据库source时候不动了,df 看了一下,原来是服务器空间没有了。