系统版本:ubuntu 12.04 64位
安装(测试时使用的版本是mysql-server-5.5):
apt-get install mysql-server
启动和停止等:
/etc/init.d/mysql start
/etc/init.d/mysql restart
/etc/init.d/mysql stop
本地连接:
mysql -uname -p
更改mysql编码(比如改为utf8)
进入mysql,查看当前编码:
mysql> show variables like 'character%';
显示如下:
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
可以看到创建一个表是latin1的格式。
退出mysql,修改配置文件:
/etc/mysql/my.cnf
添加:
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
//default-character-set=utf8 //mysql版本5以前用这句
修改后需要重启mysql:
/etc/init.d/mysql restart #启动成功
再次进入mysql查看:
mysql> show variables like 'character%';
显示如下:
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+
修改成功。
*注意:需要重新创建数据库和表才能生效,老数据库中的数据编码不会改变。
更改mysql数据库位置:
数据库文件默认存储位置在/var/lib/mysql。
MySQL数据库的文件结构是怎么样的呢,对于这样子创建的数据库命令:
CREATE DATABASE mysqldb
在默认的数据库存储位置下就会有个文件夹mysqldb。要操作数据库首先得停止数据库进程:
$sudo /etc/init.d/mysql stop
本文以转移到/home/mysql这个位置为例,下面命令将原有数据库转移到新位置:
$sudo cp –R –p /var/lib/mysql /home/mysql
编辑MySQL配置文件:
$sudo vim /etc/mysql/my.cnf
找到datadir这一行,将后面等于号之后的内容更改为/home/mysql然后保存退出。
自Ubuntu 7.10开始,Ubuntu就开始使用一种安全软件叫做AppArmor,这个安全软件会在你的文件系统中创建一个允许应用程序访问的区域(专业术语:应 用程序访问控制)。如果不为MySQL修改AppArmor配置文件,永远也无法为新设置的数据库存储位置启动数据库服务。
配置AppArmor:
$sudo vim /etc/apparmor.d/usr.sbin.mysqld
找到/var/lib/mysql/这两行,注释掉这两行(在这两行前分别添加一个符号“#”即可注释),在这两行之前或之后加上下面内容:
/home/mysql/ r,
/home/mysql/** rwk,
保存后退出,执行命令:
$sudo /etc/init.d/apparmor reload
等待显示Reloading AppArmor profiles : done.即可以重启MySQL服务:
$sudo /etc/init.d/mysql start
至此MySQL数据库存储位置就更改完毕了。
可能遇到的问题:
Q:当我运行$sudo /etc/init.d/apparmor reload却返回信息
Skipping profile /etc/apparmor.d/usr.sbin.mysqld~
: Warning.
并且也无法启动MySQL服务,怎么办呢?
A:出现这个问题可能是因为你使用了$sudo gedit或$gksu gedit这样子的命令来编辑usr.sbin.mysqld这个配置文件的,这两个图形界面文本编辑器会在相同位置生成一个 usr.sbin.mysqld~的文件,从而影响了AppArmor读取配置文件,出现这个问题先删除这个usr.sbin.mysqld~文件:
$sudo rm /etc/apparmor.d/usr.sbin.mysqld~
然后使用$sudo vim这个终端文本编辑器来编辑配置文件即可。
远程链接mysql数据库
进入mysql,执行如下命令:
格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by "用户密码";
例如:
grant select,update,insert,delete on *.* to root@192.168.1.12 identified by "passwd";
如果登录主机(host字段)的值为%就表示可以在任何客户端机器上能以root用户登录到mysql服务器。可用如下命令修改:
update user set host = ’%’ where user = ’root’;
授权权限改为ALL PRIVILEGES表示对所有操作授权,也可在授权时使用如下命令:
grant all privileges on *.* to root@'%' identified by "passwd";
查看当前用户权限:
use mysql;
select host,user,password from user;
修改授权后,需要刷新授权缓存,以便授权生效。
FLUSH PRIVILEGES;
注意:远程链接需要修改 /etc/mysql/my.cnf 文件,
找到:bind-address = 127.0.0.1
修改为:bind-address = 0.0.0.0 或者 注释掉
重启mysql : sudo /etc/init.d/mysql restart
*使用客户端链接时(standard(tcp/ip)链接),default schema项需要填写数据库名称(必须在服务器上已存在)
导入导出mysql数据
导入mysql:
mysql> source name.sql(路径);
导出mysql:
使用mysqlworkbench客户端-》data export。
mysql用户管理
假设用户名:xoneday 用户数据库:blog
1.新建用户。
//登录MYSQL
@>mysql -u root -p
@>密码
//创建用户
mysql> insert into mysql.user(Host,User,Password) values("localhost”,”xoneday”,password("1234"));
//刷新系统权限表
mysql>flush privileges;
这样就创建了一个名为:xoneday 密码为:1234 的用户。
然后登录一下。
mysql>exit;
@>mysql -u xoneday -p
@>输入密码
mysql>登录成功
2.为用户授权。
//登录MYSQL(有ROOT权限)。我里我以ROOT身份登录.
@>mysql -u root -p
@>密码
//首先为用户创建一个数据库(blog)
mysql>create database blog;
//授权xoneday用户拥有blog数据库的所有权限。
>grant all privileges on blog.* to xoneday@localhost identified by '1234';
//刷新系统权限表
mysql>flush privileges;
mysql>其它操作
/*
如果想指定部分权限给一用户,可以这样来写:
mysql>grant select,update on blog.* to xoneday@localhost identified by '1234';
//刷新系统权限表。
mysql>flush privileges;
*/
3.删除用户。
@>mysql -u root -p
@>密码
mysql>DELETE FROM user WHERE User=“xoneday” and Host="localhost";
mysql>flush privileges;
//删除用户的数据库
mysql>drop database blog;
4.修改指定用户密码。
@>mysql -u root -p
@>密码
mysql>update mysql.user set password=password('新密码') where User="xoneday" and Host="localhost";
mysql>flush privileges;
查看mysql数据库表大小(存储空间):
假设我们要查询的表存储在:
数据库名:zcdata
表名:zctable
1: 先进入MySQL自带管理库:information_schema
mysql> use information_schema;
2: 查询大小,显示数据字节数
mysql> select data_length,index_length
from tables where
table_schema='zcdata'
and table_name = 'zctable';
3: 查询大小,已MB为单位显示
mysql> select concat(round(sum(data_length/1024/1024),2),'MB') as data_length_MB,
oncat(round(sum(index_length/1024/1024),2),'MB') as index_length_MB
from tables where
table_schema='zcdata'
and table_name = 'zctable';
常见错误:
mysqldump: Got error: 1045:
解决(假设使用root用户):
mysql -uroot -p
mysql> use mysql;
mysql> update user set password=password('new password') where user='root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
mysqldump: Got error: 1044:
解决:
加上-skip-lock-tables选项即可。即:
mysqldump -u dbuser -ppass db --skip-lock-tables > db.sql
使用mysqlworkbench客户端时,
选择-高级-其他-取消-lock