【安装】
目标是在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,
由上图可见database和server的字符集使用了latin1编码方式,不支持中文,即存储中文时会出现乱码。修改/etc/my.cnf以支持中文,修改后重启mysql,
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;