mysql实用指南
mysqld --verbose --help:
可以显示 mysql 的编译配置选项,即功能配置描述。
mysql 显示所有支持的字符集: SHOW CHARACTER SET;
mysql 创建数据库或表的时候设置是否大小写敏感:
CREATE DATABASE test_database CHARACTER SET utf8 COLLATE utf8_general_cs; # 这句没什么用处,见下面的解释。 cs 意思是 case sensitive
当然你也可以在创建结束后使用alter来改变:
ALTER TABLE table_name MODIFY column_name column_datatype COLLATE utf8_general_ci; # 这句有效果, ci 意思是 case insensitive
但是,记住,mysql的database和table都是操作系统的文件系统的目录或文件名,因此不管你在创建他们时是否设置了大小写敏感,他们都是和操作系统相关的,即windows上数据库名和表名是大小写无关的,而再linux上是大小写敏感的。
只有表的column是和操作系统无关的,因为他们不是目录入口,因此你可以在创建column时设置column名是否大小写相关,也可以使用alter来修改大小写敏感否。
如果真的需要在linux下设置数据库名和table名大小写无关的话,可以考虑使用lower_case_table_names变量,但不保证有效,可以了解下:
lower_case_table_names:
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_lower_case_table_names
If set to 0, table names are stored as specified and comparisons are case sensitive. If set to 1, table names are stored in lowercase on disk and comparisons are not case sensitive. If set to 2, table names are stored as given but compared in lowercase. This option also applies to database names and table aliases. For additional information, see Section 9.2.2, “Identifier Case Sensitivity”.
mysql 的配置文件my.cnf调用次序(mysqld --verbose --help 的输出里有以下打印):
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
Installation(完整的安装帮助参考 INSTALL-BINARY 文件):
To install and use a MySQL binary distribution, the basic command sequence looks like this:
shell> groupadd mysql
shell> useradd -r -g mysql mysql
shell> cd /usr/local
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> bin/mysqld_safe --user=mysql &
# Next command is optional
shell> cp support-files/mysql.server /etc/init.d/mysql.server
指定自己的 my.cnf 配置文件:
mysqld_safe --defaults-file=FILE
若运行时找不到 libaio.so , 可以: sudo apt-get install libaio1 libaio-dev
首次启动时修改mysql的 root@'localhost' 的密码:
$ ./bin/mysql -uroot
mysql > SET PASSWORD FOR root@'localhost' = PASSWORD('your_passwd');
mysql > FLUSH PRIVILEGES;
下次登录就要: ./bin/mysql -uroot -p
修改密码:
$ mysqladmin -u root -p password newpassword
Adding User Accounts
You can create MySQL accounts two ways:
-
By using account-management statements intended for creating accounts and establishing their privileges, such as
CREATE USER
andGRANT
. These statements cause the server to make appropriate modifications to the underlying grant tables. -
By manipulating the MySQL grant tables directly with statements such as
INSERT
,UPDATE
, orDELETE
.
The preferred method is to use account-management statements because they are more concise and less error-prone than manipulating the grant tables directly. All such statements are described in Section 13.7.1, “Account Management Statements”. Direct grant table manipulation is discouraged, and is not described here. The server is free to ignore rows that become malformed as a result of such modifications.
Another option for creating accounts is to use the GUI tool MySQL Workbench. Also, several third-party programs offer capabilities for MySQL account administration. phpMyAdmin
is one such program.
The following examples show how to use the mysql client program to set up new accounts. These examples assume that privileges have been set up according to the defaults described in Section 2.12.4, “Securing the Initial MySQL Accounts”. This means that to make changes, you must connect to the MySQL server as the MySQL root
user, which has the CREATE USER
privilege.
First, use the mysql program to connect to the server as the MySQL root
user:
shell> mysql --user=root mysql
If you have assigned a password to the root
account, you must also supply a --password
or -p
option.
After connecting to the server as root
, you can add new accounts. The following example uses CREATE USER
and GRANT
statements to set up four accounts:
mysql>CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql>GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
->WITH GRANT OPTION;
mysql>CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql>GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
->WITH GRANT OPTION;
mysql>CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin_pass';
mysql>GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
mysql>CREATE USER 'dummy'@'localhost';
The accounts created by those statements have the following properties:
-
Two accounts have a user name of
monty
and a password ofsome_pass
. Both are superuser accounts with full privileges to do anything. The'monty'@'localhost'
account can be used only when connecting from the local host. The'monty'@'%'
account uses the'%'
wildcard for the host part, so it can be used to connect from any host.The
'monty'@'localhost'
account is necessary if there is an anonymous-user account forlocalhost
. Without the'monty'@'localhost'
account, that anonymous-user account takes precedence whenmonty
connects from the local host andmonty
is treated as an anonymous user. The reason for this is that the anonymous-user account has a more specificHost
column value than the'monty'@'%'
account and thus comes earlier in theuser
table sort order. (user
table sorting is discussed in Section 6.2.4, “Access Control, Stage 1: Connection Verification”.) -
The
'admin'@'localhost'
account has a password ofadmin_pass
. This account can be used only byadmin
to connect from the local host. It is granted theRELOAD
andPROCESS
administrative privileges. These privileges enable theadmin
user to execute the mysqladmin reload, mysqladmin refresh, and mysqladmin flush-xxx
commands, as well as mysqladmin processlist . No privileges are granted for accessing any databases. You could add such privileges usingGRANT
statements. -
The
'dummy'@'localhost'
account has no password (which is insecure and not recommended). This account can be used only to connect from the local host. No privileges are granted. It is assumed that you will grant specific privileges to the account usingGRANT
statements.
To see the privileges for an account, use SHOW GRANTS
:
mysql> SHOW GRANTS FOR 'admin'@'localhost';
+-----------------------------------------------------+
| Grants for admin@localhost |
+-----------------------------------------------------+
| GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost' |
+-----------------------------------------------------+
The next examples create three accounts and grant them access to specific databases. Each of them has a user name of custom
and password of obscure
:
mysql>CREATE USER 'custom'@'localhost' IDENTIFIED BY 'obscure';
mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
->ON bankaccount.*
->TO 'custom'@'localhost';
mysql>CREATE USER 'custom'@'host47.example.com' IDENTIFIED BY 'obscure';
mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
->ON expenses.*
->TO 'custom'@'host47.example.com';
mysql>CREATE USER 'custom'@'%.example.com' IDENTIFIED BY 'obscure';
mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
->ON customer.*
->TO 'custom'@'%.example.com';
The three accounts can be used as follows:
-
The first account can access the
bankaccount
database, but only from the local host. -
The second account can access the
expenses
database, but only from the hosthost47.example.com
. -
The third account can access the
customer
database, from any host in theexample.com
domain. This account has access from all machines in the domain due to use of the “%
” wildcard character in the host part of the account name.
对于java ssh项目,一般情况下只需要添加 'monty'@'localhost' 这样的一个用户就行了,所有的远程访问都是通过他进行的,所以不需要 'monty'@'%' 这个用户。这个用户不安全。
实例:
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';
Then
GRANT ALL PRIVILEGES ON dbTest.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';
支付宝扫一扫捐赠
微信公众号: 共鸣圈
欢迎讨论,邮件: 924948$qq.com 请把$改成@
QQ群:263132197
QQ: 924948