【安装】

目标是在linux上安装mysql,步骤:

1、先去http://dev.mysql.com/downloads/mysql/下载,选好平台,我直接下载的Linux - Generic (glibc 2.5) (x86, 64-bit), RPM Bundle,里面server,client都有;

2、解压后,执行rpm -ivh MySQL-server-***.rpm和rpm -ivhMySQL-client-***.rpm就成功安装了server和client(这种安装方式无法指定安装位置),默认配置文件在/usr/my.cnf,可以修改端口号等,最好将配置挪到/etc/my.cnf;

3、默认安装后,数据库对应的数据都放在/var/lib/mysql下,最好是改个位置,具体方法见下文;

4、一般最好在启动服务之前设置好mysql服务器编码,方法在/etc/my.cnf中[mysqld]中添加character-set-server=utf8 或者default-character-set=utf8(两种写法根据MySQL版本而定,5.6版本用前者);

5、在/usr/share/mysql/下执行mysql.server start可以启动mysql,还有stop,restart等,也可service mysql 。。。;


【更改mysql数据信息存储位置】

1、首先关闭mysql服务;

2、假定目标位置为/export/mysql-data/,则先mkdir -p /export/mysql-data,然后chown -R

3、cp -a

4、修改/etc/my.cnf,datadir = /export/mysql-data/mysql,socket = /export/mysql-data/mysql.sock;

5、vi /etc/init.d/mysqld,把其中datadir=/var/lib/mysql一行中,等号右边的路径改成/export/mysql-data/mysql;

6、vi /usr/bin/mysqld_safe,这里也是修改datadir的目录为/home/mysql_data/mysql ;

8、同时也可以更改log及pid的位置;

9、起动mysql,查看进程是否正常;

10、建立一个mysql.sock的软连接,ln -s /export/mysql-data/mysql.sock /var/lib/mysql/mysql.sock;

11、执行mysql -u root -p*****进入mysql;

12、执行更改密码等;



【本地登录mysql服务】

安装成功后会提示在/root/.mysql_secret中有为root生成的随机密码。

1、执行mysql -u root -p随机的密码   进入mysql控制台 (后续执行命令都要以;结尾)

2、set password for 'root'@'localhost' = password('123456');     改密码

3、至此可以用新密码登录;


【远程连接或登录mysql服务】

默认情况下Mysql只允许本地进入设置,如果需要外部IP连接到mysql(比如用mysql workbench访问mysql,是不行的),需要向mysql数据库里的“user”表里添加相关授权,如下:

1、grant all on *.* to 'root'@'172.16.2.7'  identified by '123456';

2、flush privileges;

此时在172.16.2.7上用MySQL workbench可以成功连上服务器上的mysql。


【grant语法】

grant 权限名(所有的权限用all) on 库名(*全部).表名(*全部) to ‘要授权的用户名’@’%’(%表示所有的IP,可以只写一个IP) identified by “密码”;

如:增加一个accountdbtest的用户,允许该账号在所有机器上可以连接到mysql,且该账户只有四个权限:

grant delete,insert,select,updateon accountdb.* to accountdbtest@'%' identified by 'accountdbtest'



针对执行存储过程,还需要添加execute权限:

grantexecuteon accountdb.* to accountdbtest@'10.64.78.%' identified by 'accountdbtest'


撤销授权:revoke all on *.* from 'accountdbtest'@'10.64.78.%';

查看授权:show grants for 'accountdbtest'@'10.64.78.%';

身份检查使用user表(Host, User和Password)3个范围列执行。服务器只有在user表记录的Host和User列匹配客户端主机名和用户名并且提供了正确的密码时才接受连接。


【错误日志】

1、查看mysql错误日志的位置,show variables like 'log_error'; 一般在/var/log/mysqld.log;


【编码问题】

可以阅读高性能MySQL某章。

1、有字符集和校对规则两个概念,分别用show variables like 'character%';   show variables like 'collation%';查看默认字符集及相关的校对规则;每种字符集可能有几种校对规则,但会有一个默认的校对规则,要想列出一个的校对规则,使用show collation  like 'utf%'语句,两个不同的字符集不能有相同的校对规则,一种校对准则一般又区分大小写不敏感,大小写敏感,二元三种,名字都以其相关的字符集名开始,然后以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束。

2、mysql数据库的编码默认不是UTF-8,

mysql设置本机ip数据库 mysql配置ip_mysql设置本机ip数据库

由上图可见database和server的字符集使用了latin1编码方式,不支持中文,即存储中文时会出现乱码。修改/etc/my.cnf以支持中文,修改后重启mysql,

mysql设置本机ip数据库 mysql配置ip_MySQL_02

3、修改程序连数据库的url为jdbc:mysql://172.16.2.7:3306/accountdb?useUnicode=true&characterEncoding=utf8

4、创建数据库时指定编码和校对规则,create database accountdb characterset utf8 COLLATE utf8_general_ci;     可以使用show full columns from giftcard_batch;  查看表的详细信息,主要是collation;

5、这样show procedure status;看到存储过程相关的编码都为UTF-8,建数据库表也明确指定编码;

6、为了支持表情符号,得使用utf8mb4编码,这样配connection url时不能配编码,因为jdbc不支持utf8mb4;


【存储过程】

存储过程一般是root创建,show procedure status;可以看到存储过程有definer和security_type两个参数,如果connection url中配的用户不是root,则需要为其额外分配一个权限:grant select on mysql.proc to'accountdbtest'@'10.64.78.%';否则执行存储过程时会报“ User does not have access to metadata required to determine stored procedure parameter types. If rights can not be granted, configure connection with "noAccessToProcedureBodies=true" to have driver generate parameters that represent INOUT strings irregardless of actual parameter types.”。。。


security_type有definer和invoker两种,可以在创建存储过程时指定,如果不指定默认是definer,也可以后续更改:alter procedure pro_name sql security invoker;

definer:在执行存储过程前验证definer对应的用户是否存在,以及该用户是否具有相应的操作数据存储过程的权限(应该是execute和select on mysql.proc),若没有则报错;

invoker:在执行存储过程时判断调用者是否有相应权限,若没有则报错。


【设置连接超时时间】

通过show global variables like "wait_timeout" 查看超时时间,一般是28800秒,即8小时,如果该时间段内connection没有数据通信,连接会被断开,在[mysqld]中设置wait_timeout=***然后重启mysql。貌似windows/linux对此设置的最大值分别为24/365天。


【常用命令】

1、select Host,User from mysql.user;查看当前用户;

2、show databases/tables;

3、show procedure/table status;

4、show create procedure procedurename;查看存储过程源代码

5、show columns from tablename;      showfull columns fromtablename;

6、show variables like 'character%';   show variables like 'collation%';
7、show variables like 'log_error';

8、create database accountdb character set utf8 COLLATE utf8_general_ci;