首頁 >php教程 >php手册 >Mysql管理中一些常用的命令和技巧

Mysql管理中一些常用的命令和技巧

WBOY
WBOY原創
2016-06-07 11:43:241357瀏覽

Mysql管理中一些常用的命令和技巧
1 参数设置方法:<br> 1) 如果对服务器参数不熟悉,建议从$MYSQL_HOME/support-files下面按照需要cp合适的配置文件为数据库配置文件,例如:<br> cp my-large.cnf  /etc/my.cnf<br> 2) session级修改(只对本session有效):<br> set para_name=value;<br> 3) 全局级修改(对所有新的连接都有效,但是数据库重启后失效)<br> set global  para_name=value;<br> 4) 永久修改<br> 将参数在my.cnf中增加或者修改<br> <br> 2 mysql.sock丢失后怎么连接数据库?<br> 请注意,如果你指定localhost作为一个主机名,mysqladmin默认使用Unix套接字文件连接,而不是TCP/IP。从 MySQL 4.1开始,通过--protocol= TCP | SOCKET | PIPE | MEMORY}选项,你可以显示地指定连接协议 ,举例如下:<br> socket连接:<br> [zzx@zzx mysql]$ mysql -uroot<br> ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/home/zzx/mysql/mysql.sock' (2)<br> tcp连接:<br> [zzx@zzx mysql]$ mysql --protocol=TCP -uroot -p -P3307 -hlocalhost<br> Enter password: <br> Welcome to the MySQL monitor.  Commands end with ; or \g.<br> Your MySQL connection id is 73 to server version: 5.0.15-standard<br> Type 'help;' or '\h' for help. Type '\c' to clear the buffer.<br> mysql><br> <br> 3 同一台机器运行多个mysql:<br> 最简单的方法,将每个mysql安装在不同的用户下面,例如mysql1和mysql2,每个用户下面,分别执行如下操作:<br> export MYSQL_HOME=/home/mysql1/mysql<br> shell> groupadd mysql<br> shell> useradd -g mysql mysql1<br> shell> cd /home/mysql1<br> shell>tar -xzvf  /home/mysql1/mysql-VERSION-OS.tar.gz<br> shell> ln -s mysql-VERSION-OS.tar.gz mysql<br> shell> cd mysql<br> cp support-files/my-large.cnf(根据实际情况选择)  ./my.cnf<br> vi my.cnf ,主要修改[client]和[mysqld]下面的port和socket,并指定字符集,例如:<br> [client]<br> port            = 3307<br> socket          = /home/mysql1/mysql/data/mysql.sock<br> # The MySQL server<br> [mysqld]<br> default-character-set = utf8<br> port            = 3307<br> socket          = /home/mysql1/mysql/data/mysql.sock<br> 。。。。。。<br> shell> scripts/mysql_install_db --user=mysql1<br> shell> chown -R root:mysql  .<br> shell> chown -R mysql1:mysql data<br> shell> bin/mysqld_safe --user=mysql &<br> mysql2用户执行的和mysql1类似,不同的是指定不同的MYSQL_HOME,不同的port、socket即可<br> <br> 4 查看用户权限:<br> 怎么样查看用户权限,最简单的方法,通过如下语句:<br> mysql> show grants for 'test1'@'localhost';<br> 如果要通过权限表来查看,比较复杂:<br> 在5.0以下,按照以下顺序来查看:<br> user->db->tables_priv->columns_priv,权限范围依次递减。和参数的设置不同,权限设置的原则是:<br> 全局权限覆盖局部权限<br> 首先,从user表中查看user和host对应的那些权限值,比如:<br> select_priv="Y"<br> 说明此用户组具有对所有数据库的所有表的select权限,此时,再单独对某个数据库设置select权限已经没有意义<br> 如果user表中的select_priv="N",则接着查看db表中对应用户组的权限,如果存在一条记录如下:<br>  Host      | Db     | User      | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Create_tmp_table_priv | Lock_tables_priv |<br> +-----------+--------+-----------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+<br> | localhost | test2  | test1     | Y           | Y           | Y           | Y           | Y           | Y         | N          | Y               | Y          | Y          | Y                     | Y                |<br> 则表示test1@localhost用户组对test2数据库中的所有表具有所有权限(除了grant),此时单独对此数据库内的表进行权限设置已经没有意义;如果没有此记录或者对应权限不是“N”,则接着查询tables_priv表,此表中的记录决定了对数据库中实际表的权限;如果tables_priv内记录的权限都是Y,则对表内的任何列单独设置权限已经没有意义,如果tables_priv没有对应表的记录或者对应权限不是“N”,则接着查询columnss_priv表的记录。<br> 一步一般类推,最后得出某个用户组的权限。<br> 在mysql 5.0以后,多了一个数据字典库information_schema,通过这个库里面的USER_PRIVILEGES、SCHEMA_PRIVILEGES、TABLE_PRIVILEGES、COLUMN_PRIVILEGES表可以得到同样的结论。<br> <br> 5 修改用户密码:<br> 方法1:<br> 可以用mysqladmin命令在命令行指定密码:<br> shell> mysqladmin -u user_name -h host_name password "newpwd"<br> 方法2:<br> 为账户赋予密码的另一种方法是执行SET PASSWORD语句:<br> mysql> SET PASSWORD FOR 'jeffrey'@'%' = PASSWORD('biscuit');<br> 如果是更改自己的密码,可以省略for语句:<br> mysql> SET PASSWORD = PASSWORD('biscuit');<br> 方法3:<br> 你还可以在全局级别使用GRANT USAGE语句(在*.*)来指定某个账户的密码而不影响账户当前的权限:<br> mysql> GRANT USAGE ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'biscuit';<br> 方法4:<br> 直接更改数据库的user表:<br> shell> mysql -u root mysql<br> mysql> INSERT INTO user (Host,User,Password)<br>   -> VALUES('%','jeffrey',PASSWORD('biscuit'));<br> mysql> FLUSH PRIVILEGES;<br> shell> mysql -u root mysql<br> mysql> UPDATE user SET Password = PASSWORD('bagel')<br>   -> WHERE Host = '%' AND User = 'francis';<br> mysql> FLUSH PRIVILEGES;<br> 注意:更改密码时候一定要使用password函数(mysqladmin和grant两种方式不用写,会自动加上)<br> <br> 6 怎样灵活的指定连接的主机:<br> 在user表Host值的指定方法:<br> l Host值可以是主机名或IP号,或'localhost'指出本地主机。 <br> l 你可以在Host列值使用通配符字符“%”和“_”。 <br> Host值'%'匹配任何主机名,空Host值等价于'%'。它们的含义与LIKE操作符的模式匹配操作相同。例如,'%'的Host值与所有主机名匹配,而'%.mysql.com'匹配mysql.com域的所有主机。<br> <br> 7 到底匹配哪个符合条件的用户:<br> 例如以下两个用户:<br> 'thomas.loc.gov'  'fred'  fred, 从thomas.loc.gov 连接<br> '%'       'fred'  fred, 从任何主机连接<br>  当从主机thomas.loc.gov进行连接的时候,上面两个用户显然都满足条件,该选择哪个呢?<br> 如果有多个匹配,服务器必须选择使用哪个条目。按照下述方法解决问题:<br> 服务器在启动时读入user表后进行排序。<br> 然后当用户试图连接时,以排序的顺序浏览条目<br> 服务器使用与客户端和用户名匹配的第一行。<br> 当服务器读取表时,它首先以最具体的Host值排序。主机名和IP号是最具体的。'%'意味着“任何主机”并且是最不特定的。有相同Host值的条目首先以最具体的User值排序(空User值意味着“任何用户”并且是最不特定的)。例如下例是排序前和排序后的结果:<br>  +-----------+----------+-<br> | Host      | User     | …<br> +-----------+----------+-<br> | %         | root    | …<br> | %         | jeffrey  | …<br> | localhost     | root    | …<br> | localhost    |        | …<br> +-----------+----------+-<br> 排序前<br> +-----------+----------+-<br> | Host      | User     | …<br> +-----------+----------+-<br> | localhost | root     | … ...<br> | localhost |         | … ...<br> | %      | jeffrey      | … ...<br> | %      | root     | … ...<br> +-----------+----------+-<br> 排序后<br> ·记住:明确指定用户名的用户不一定是被匹配的用户<br> <br> 8 不进入mysql,怎样运行sql语句?<br> 使用--execute(-e)选项:<br> mysql -u root -p -e "SELECT User, Host FROM User" mysql<br> 可以按这种方式传递多个SQL语句,用分号隔开:<br> shell> mysql -u root -p -e "SELECT Name FROM Country WHERE Name LIKE 'AU%';SELECT COUNT(*) FROM City" world<br> Enter password: ******<br> +-----------+<br> | Name      |<br> +-----------+<br> | Australia |<br> | Austria   |<br> +-----------+<br> +----------+<br> | COUNT(*) |<br> +----------+<br> |     4079 |<br> +----------+<br> 请注意长形式(--execute)后面必须紧跟一个等号(=)。<br> <br> 9 客户端怎么访问内网数据库?<br> oracle的客户端可以通过cman来访问内网中的oralce数据库,mysql能实现类似功能吗?可以,假设服务器如下:<br> 中转服务器ip:202.108.15.160(192.168.161.38)<br> 内网服务器ip:192.168.161.39,在端口3306上起着mysql服务<br> 客户端:windows,secureCRT<br> l 在中转服务器上增加ssh turnal,具体操作如下:<br> 1. 点击session的属性<br> 2. 点击connection->port_forwarding<br> 3. 点击add按钮:name中随便起个名字;local下的ip写上127.0.0.1,port随便起一个未使用的port,例如9999;remote下面的的hostname写上192.168.161.39,端口写上3306;点击ok设置成功<br> l 在192.168.161.39的mysql内增加一个用户test,host设置为192.168.161.38<br> l grant select on dbname.* to test@192.168.161.38 identified by '123';<br> 客户端执行mysql -h127.0.0.1 -P3306 -utest -p123,连接成功

AD:真正免费,域名+虚机+企业邮箱=0元

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn