文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>mysql基础知识

mysql基础知识

时间:2008-09-23  来源:zhiming.yk

                                     mysql基础知识 =======================================================================================================              实验环境:(fc4-test 2.6.11-1.1369_FC4) =======================================================================================================     (一)、mysql安装: 首先下载合适的二进制包,例如下载了文件mysql-max-4.1.10a-pc-linux-gnu-i686.tar.gz     (1.1).开始安装: cd /usr/local tar -zxvf mysql-max-4.1.10a-pc-linux-gnu-i686.tar.gz ln -s mysql-max-4.1.10a-pc-linux-gnu-i686 mysql groupadd mysql useradd -g mysql mysql cd mysql scripts/mysql_install_db --user=mysql chown -R root  . chown -R mysql data chgrp -R mysql . bin/mysqld_safe --user=mysql & (这步代表以mysql用户启动,也可以不用这步,直接用root用户启动) 安装成功!!!!!!     说明:有什么个性化的配置,可以通过创建 /etc/my.cnf 或者 /usr/local/mysql/data/my.cnf,增加相关的参数来实现。 **************************************************************************************************************     (二)、mysql的启动   (2.1)、mysql的启动(两种方式)  (a)、/usr/local/mysql/support-files/mysql.server start  (b)、cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql        service mysql start     (2.3)、进入mysql的两种方式: (a)、 [root@10 support-files]# /usr/local/mysql/bin/mysql Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 4 to server version: 4.1.10a-max-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> (b)、  cp /usr/local/mysql/bin/mysql /sbin/ [root@10 support-files]# mysql Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 3 to server version: 4.1.10a-max-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>     (2.4)设置mysql开机自动启动 [root@10 bin]# chkconfig --add mysql [root@10 bin]# chkconfig --list mysql mysql           0:off   1:off   2:off   3:off   4:off   5:off   6:off [root@10 bin]# chkconfig mysql on [root@10 bin]# chkconfig --list mysql mysql           0:off   1:off   2:on    3:on    4:on    5:on    6:off ********************************************************************************************************           (三)、数据目录的位置 (3.1)、一个缺省数据目录被编译进了服务器,如果你从一个源代码分发安装MySQL,典型的缺省目录为/usr/local/var, 如果从RPM文件安装则为/var/lib/mysql,如果从一个二进制分发安装则是/usr/local/mysql/data。 在你启动服务器,通过使用一个--datadir=/path/to/dir选项可以明确指定数据目录位置。如果你想把数据目录置于其它缺省位置外的某处,这很有用。 作为一名MySQL管理员,你应该知道你的数据目录在哪里。如果你运行多个服务器,你应该是到所有数据目录在哪里,但是如果你不知道确切的位置,由多种方法找到它: 使用mysqladmin variables从你的服务器直接获得数据目录路径名。查找datadir变量的值,在Unix上,其输出类似于: [root@10 bin]# mysqladmin variables   +---------------------------------+----------------------------------------------------------------------+ | Variable_name                   | Value                                                                | +---------------------------------+----------------------------------------------------------------------+ | back_log                        | 50                                                                   | | basedir                         | /usr/local/mysql-max-4.1.10a-pc-linux-gnu-i686/                      | | bdb_cache_size                  | 8388600                                                              | | bdb_home                        | /usr/local/mysql/data/                                               | | bdb_log_buffer_size             | 131072                                                               | | bdb_logdir                      |                                                                      | | bdb_max_lock                    | 10000                                                                | | bdb_shared_data                 | OFF                                                                  | | bdb_tmpdir                      | /tmp/                                                                | | binlog_cache_size               | 32768                                                                | | bulk_insert_buffer_size         | 8388608                                                              | | character_set_client            | latin1                                                               | | character_set_connection        | latin1                                                               | | character_set_database          | latin1                                                               | | character_set_results           | latin1                                                               | | character_set_server            | latin1                                                               | | character_set_system            | utf8                                                                 | | character_sets_dir              | /usr/local/mysql-max-4.1.10a-pc-linux-gnu-i686/share/mysql/charsets/ | | collation_connection            | latin1_swedish_ci                                                    | | collation_database              | latin1_swedish_ci                                                    | | collation_server                | latin1_swedish_ci                                                    | | concurrent_insert               | ON                                                                   | ----------------------------------------------------------------------------------------------------------     (3.2)、如果你有多个服务器在运行,它们将在不同的TCP/IP端口或套接字上监听,通过提供连接服务器正在监听的端口或 套接字的--port或--socket选项,你可以轮流获得它们每一个的数据目录信息: %msqladmin --port=port_name variables %mysqladmin --socket=/path/to/socket variables mysqladmin命令可运行在任何你能从其连接服务器的主机上,如果你想在一个远程主机连接服务器,使用一个--host=host_name选项: %mysqladmin --host=host_name variables     例: 查看本机的数据库目录信息: [root@10 bin]# ./mysqladmin --port=3306 variables [root@10 bin]# ./mysqladmin --socket=/tmp/mysql.sock variables 查看远程机器的目录信息: [root@10 bin]# ./mysqladmin --host=10.4.5.211 variables       (3.3)、如果你的系统运行多个服务器,ps命令可能特别有用,因为你能马上发现多个数据目录位置,缺点是必须在服务器上运行, 而且可能没有有用的信息产生,除非在mysqld命令行上明确指定了--datadir选项。 如果MySQL是从一个源代码分发安装的,你可以 检查其配置信息确定数据目录位置。例如,位置可从顶级Makefile中获得,但是注意,位置是Makefile中的localstatedir值,不是datadir, 而且,如果分发位于一个NFS挂载的文件系统并用来为多个主机构建MySQL,配置信息反映了分发被最新构建的主机,这可能不能提供 你感兴趣的主机的数据目录信息。 如果上述方式失败,你可以用find寻找数据库文件,下列命令寻找“.frm”文件,它是任何MySQL安装的一部分:   [root@10 bin]# find / -name ".frm" -print ***********************************************************************************************************************         (四)、 数据库表的表示 每个数据库在数据库目录中有3个文件:一个样式(描述文件)、一个数据文件和一个索引文件。每个文件的基本名是表名, 文件名扩展名代表文件类型。扩展名如下表。数据和索引文件的扩展名指出表使用老式IASM索引或新式MyISAM索引。表 MySQL文件类型   文件类型         文件名扩展名                              文件内容   样式文件         .frm 描述表的结构                    (它的列、列类型、索引等)。   数据文件         .ISD(ISAM) 或.MYD(MyISAM)             包含数据文件上的所有索引的索引树。   索引文件         .ISM(ISAM) 或.MYI(MyISAM)             该索引文件依赖表是否有索引而存在。   ****************************************************************************************************       (五)、mysql一些常用命令:     [root@10 support-files]# mysql Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 5 to server version: 4.1.10a-max-log   Type 'help;' or '\h' for help. Type '\c' to clear the buffer.   建库 mysql> create database wang_db; Query OK, 1 row affected (0.03 sec)   mysql> use wang_db Database changed   建表 mysql> create table wang_tb (id int(2),name varchar(30),address varchar(30)); Query OK, 0 rows affected (0.01 sec)     插入数据 mysql> insert into wang_tb values(1,"wangzhiming", "dalian"); Query OK, 1 row affected (0.00 sec)   mysql> insert into wang_tb values(2,"zhoulijun", "xinmin"); Query OK, 1 row affected (0.00 sec)     显示数据库信息 mysql> show databases; +----------+ | Database | +----------+ | mysql    | | test     | | wang_db  | +----------+ 3 rows in set (0.00 sec)     mysql> use wang_db; Database changed mysql> show tables; +-------------------+ | Tables_in_wang_db | +-------------------+ | wang_tb           | +-------------------+ 1 row in set (0.00 sec)     显示表: mysql> show tables; +-------------------+ | Tables_in_wang_db | +-------------------+ | wang_tb           | +-------------------+ 1 row in set (0.00 sec)   显示表信息: mysql> select * from wang_tb; +------+-------------+---------+ | id   | name        | address | +------+-------------+---------+ |    1 | wangzhiming | dalian  | |    2 | zhoulijun   | xinmin  | +------+-------------+---------+ 2 rows in set (0.01 sec)   说明:   DESCRIBE 句法 (获得列的信息): DESCRIBE 是 SHOW COLUMNS FROM 的缩写 {DESCRIBE | DESC} tbl_name [col_name | wild] DESCRIBE 提供有关一个表的列信息。col_name 可以是一个列名或是一个包含 SQL 通配符字符 “%” 和 “_” 的字符串。没有必要用引号包围字符串。 如果列类型不同于你所期望的基于一个 CREATE TABLE 语句建立的列,注意 MySQL 有时会更改列类型。这个语句是提供给与 Oracle 兼容的     mysql> desc wang_tb; +---------+-------------+------+-----+---------+-------+ | Field   | Type        | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | id      | int(2)      | YES  |     | NULL    |       | | name    | varchar(30) | YES  |     | NULL    |       | | address | varchar(30) | YES  |     | NULL    |       | +---------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)     USE 句法: 说明:USE db_name 语句告诉 MySQL 使用 db_name 数据库作为以后查询的缺省数据库。数据库保持为当前数据库,只到该会话结束 或另一个 USE 语句发出 依靠 USE 语句将一个特定数据库设为当前数据库,它并不阻止你访问另一个数据中的表。下面的示例访问 db1 数据库中的 author 表和 db2 数据库中的 editor 表:   例如: mysql> show databases; +-----------+ | Database  | +-----------+ | mysql     | | test      | | wang_db   | | wang_db_1 | | zhou_db   | +-----------+ 5 rows in set (0.00 sec)   mysql> select zhou_tb.name, wang_tb.name from zhou_tb,wang_db.wang_tb where zhou_tb.id=wang_db.wang_tb.id; +--------+-------------+ | name   | name        | +--------+-------------+ | wangqi | wangzhiming | | pangzi | zhoulijun   | +--------+-------------+ 2 rows in set (0.01 sec)         6 load data语句: 可以大量数据的一次性的插入,文本中的每条记录占一行,每个字段有tab键来分隔. 例如:   mysql> load data local infile "aa.sql" into table wang_tb; Query OK, 1 row affected (0.04 sec) Records: 1  Deleted: 0  Skipped: 0  Warnings: 0             **********************************************************************************************************************       (六)、mysql的备份与恢复     用mysqldump对MySQL数据库进行数据备份与恢复   6.1 备份主要参数: mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。 现在来讲一下 mysqldump 的一些主要参数:   1.  --compatible=name     它告诉 mysqldump,导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansi、mysql323、mysql40、postgresql、 oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要使用几个值,用逗号将它们隔开。 当然了,它并不保证能完全兼容,而是尽量兼容。   [root@10 shell]# mysqldump --compatible=db2 wang_db >/home/shell/wang_db.sql         --complete-insert,-c   导出的数据采用包含字段名的完整 INSERT 方式,也就是把所有的值都写在一行。这么做能提高插入效率,但是可能会受到  max_allowed_packet 参数的影响而导致插入失败。因此,需要谨慎使用该参数,至少我不推荐。   [root@10 shell]# mysqldump --complete-insert >/home/shell/wang_db.sql.1     --default-character-set=charset 指定导出数据时采用何种字符集,如果数据表不是采用默认的 latin1 字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。     --disable-keys 告诉 mysqldump 在 INSERT 语句的开头和结尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表     --extended-insert = true|false 默认情况下,mysqldump 开启 --complete-insert 模式,因此不想用它的的话,就使用本选项,设定它的值为 false 即可。     --hex-blob 使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。     --lock-all-tables,-x 在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。     --lock-tables 它和 --lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表, 如果是 Innodb 表可以用 --single-transaction 选项。       --no-create-info,-t 只导出数据,而不添加 CREATE TABLE 语句。     --no-data,-d 不导出任何数据,只导出数据库表结构。   --opt 这只是一个快捷选项,等同于同时添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启, 但可以用 --skip-opt 禁用。注意,如果运行 mysqldump 没有指定 --quick 或 --opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。     --quick,-q 该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。   --routines,-R 导出存储过程以及自定义函数。   --single-transaction 该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。 本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。 要想导出大表的话,应结合使用 --quick 选项。   --triggers 同时导出触发器。该选项默认启用,用 --skip-triggers 禁用它。 *******************************************************************************************************************************************************************       备份的一些常用实例:       (6.2)、备份实例: --no-create-info,-t 只导出数据,而不添加 CREATE TABLE 语句。 例:[root@10 shell]# mysqldump --no-create-info wang_db >/home/shell/wang_db.sql   --no-data,-d 不导出任何数据,只导出数据库表结构。 [root@10 shell]# mysqldump --no-data wang_db >/home/shell/wang.db.sql.1   导出完整的数据(包括表的结构和数据) [root@10 shell]# mysqldump wang_db >/home/shell/wang.db.sql.2   单独导入某个表 [root@10 shell]# mysqldump --add-drop-table wang_db wang_tb >/home/shell/wang.db.sql.3     (6.3)、恢复:   a)数据库恢复 [root@10 shell]# mysql wang_db < wang.db.sql.5     b)恢复单个表 [root@10 shell]# mysql wang_db < /home/shell/wang.db.sql.3   *****************************************************************************************************************************************************           (6.4)、增量备份       (a.)、   启用二进制日志(binlog) 采用 binlog 的方法相对来说更灵活,省心省力,而且还可以支持增量备份。 启用 binlog 时必须要重启 mysqld。首先,关闭 mysqld,打开 my.cnf,加入以下几行:   server-id   = 1 log-bin     = binlog log-bin-index   = binlog.index     (b)、然后启动 mysqld 就可以了。运行过程中会产生 binlog.000001 以及 binlog.index,前面的文件是 mysqld 记录所有对数据的更新 操作,后面的文件则是所有 binlog 的索引,都不能轻易删除。 刷新binlog日志       (c)、BINLOG日志系统的组成: BINLOG日志系统由两部分组成:binlog.index    binlog.nnn index文件是一个文本文件,每一行是一个文件名,记录一个binlog.nnn的文件所在的位置. binglog.nnn 文件是mysql的binlog文件的实体,采用二进制方式存储数据的信息. 当一个binglog.nnn文件的大小达到 max_binlog_size 后mysql就会生成一个新的binglog.nnn文件.   index文件中的最后一个binglog.nnn文件被称作Online Binlog,其他的被称作Archived Binlog. Archived Binlog 在生成后就不再会有任何改动了,但是可以被其他的同步数据库通过数据同步机制进行访问(读取). Online Binlog 是mysql正在使用的binlog,mysql在不断的追加信息,同时其他同步数据库也可能在读取这些信息. [root@10 data]# cat binlog.index ./binlog.000001         (d)、初始化日志文件 使日志文件重.001开始 mysql> reset master;   (e)、查看binglog信息 mysql> show master logs; +---------------+ | Log_name      | +---------------+ | binlog.000001 | +---------------+ 1 row in set (0.00 sec)     说明: 需要备份时,可以先执行一下 SQL 语句,让 mysqld 终止对当前 binlog 的写入,就可以把文件直接备份,这样的话就能达到增量备份的目的了: FLUSH LOGS; 如果是备份复制系统中的从服务器,还应该备份 master.info 和 relay-log.info 文件。     (f)、备份出来的 binlog 文件可以用 MySQL 提供的工具 mysqlbinlog 来查看,如: [root@10 bin]# ./mysqlbinlog /usr/local/mysql/data/binlog.000001 /*!40019 SET @@session.max_insert_delayed_threads=0*/; # at 4 #070220  5:09:26 server id 2  log_pos 4         Start: binlog v 3, server v 4.1.10a-max-log c             reated 070220  5:09:26 at startup     增量备份恢复实例:   (g)、恢复时,可以采用类似以下语句来做到: /usr/local/mysql/bin/mysqlbinlog |binlog.000001 /usr/local/mysql/bin/mysql -f wang_db   **********************************************************************************************************           (七)、MySQL数据库安全配置指南       (7.1)、 MySQL授权表运行机制   MySQL的访问控制分两个步骤:   a)服务器检查是否允许该用户连接。   b)如果该用户有权连接,那么服务器还会检查它的每一个请求是否有足够的权限。比如:用户检索数据库中的一个表需要有这个数据库的select权限,用户删除数据库中的一个表需要有这个数据库的drop权限。     授权表的user, db,host表使用这两个步骤,tables_priv和columns_priv表只使用第二步(检查请求)。每个授权表包含决定一个权限何时运用的范围列和决定授予哪种权限的权限列。 范围列指定表中的权限何时运用。每个授权表条目包含User和Host列来指定权限何时运用于一个给定用户从给定主机的连接。其他表包含附加的范围列,如db表包含一个Db列指出权限运用于哪个数据库。类似地,tables_priv和columns_priv表包含范围字段,缩小范围到一个数据库中的特定表或一个表的特定列。       (7.2)、 下面是user表的Host字段和User字段组合的一些例子: Host值              Uer值           匹配的连接 'x.y.z'         'test'          test用户只能从x.y.z连接数据库 'x.y.z'         ''          任何用户可以从x.y.z连接数据库 '%'             'test'          test用户可以从任意主机连接数据库 ''              ''          任何用户可以从任何主机连接数据库 '%.y.z'         'test'          test用户可以从y.z域的任意主机连接数据库 'x.y.%'         'test'          test用户可以从x.y.net,x.y.com,x.y.edu等主机连接数据库 '192.168.1.%'           'test'          test用户可以从ip地址为192.168.16.1的主机连接数据库 '192.168.1.%'           'test'          test用户可以从c类子网192.168.1中的任意主机连接数据库 '192.168.1.0/255.255.255.0' 'test'          同上           SQL的字符串通配符%表示匹配任意字符,可以是0个字符,通配符_表示匹配一个字符。 权限列指出在范围列中指定的用户拥有何种权限。该表使用GRANT语句的权限名称。对于绝大多数在user、db和host表中的权限列的名称与GRANT语句中有明显的联系。如Select_priv对应于SELECT权限。       7.3)、授权表使用举例 grant用于给增加用户和创建权限,revoke用于删除用户权限。 下面是一些用grant增加用户和创建权限的例子: mysql> grant all privileges on *.* to test@localhost identified by 'test' with grant option; 这句增加一个本地具有所有权限的test用户(超级用户),密码是test。ON子句中的*.*意味着"所有数据库、所有表"。with grant option表示它具有grant权限。 mysql> grant select,insert,update,delete,create,drop on test.* to test1@'192.168.1.0/255.255.255.0' identified by 'test'; 这句是增加了一个test1用户,口令是test,但是它只能从C类子网192.168.1连接,对test库有select,insert,update,delete,create,drop操作权限。 用grant语句创建权限是不需要再手工刷新授权表的,因为它已经自动刷新了。         7.4)、 给用户创建权限还可以通过直接修改授权表: mysql> insert into user values("localhost","test",password("test"),"Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y"); mysql> flush privileges; 这两句和上面第一句grant的效果是一样的,也是增加了一个本地的test超级用户。我们看到用grant方便多了,而且还不需flush privileges。 mysql> insert into user (host,user,password) values("192.168.1.0/255.255.255.0","test1",PASSWORD("test")); mysql> insert into db values("192.168.1.0/255.255.255.0","test","test1","Y","Y","Y","Y","Y","Y","N","N","N","N") mysql> flush privileges; 这三句和上面第二句grant的效果也是一样的,也是增加了一个只能从C类子网192.168.1连接,对test库有select,insert,update,delete,create,drop操作权限的test1用户,口令是test。       7.5)、 要取消一个用户的权限,使用revoke语句。revoke的语法非常类似于grant语句,除了to用from取代并且没有identified by和with grant option子句,下面是用revoke删除用户权限的例子: mysql> revoke all on test.* from test1@'192.168.1.0/255.255.255.0'; 这句revoke就撤消了上面第二句grant创建的权限,但是test1用户并没有被删除,必须手工从user表删除: mysql> delete from user where user='test1'; mysql> flush privileges; 这样,test1用户就彻底删除了。   --------------------------------------------------------------------------------------------------------------       实例:   a)、只能查询某个数据库 mysql> grant select  on zhang_db.* to zhang@'%' identified by 'zhang'; Query OK, 0 rows affected (0.07 sec)     [root@10 sbin]# mysql -h10.4.5.212 -uzhang -pzhang zhang_db; Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 9 to server version: 4.1.10a-max-log   Type 'help;' or '\h' for help. Type '\c' to clear the buffer.   mysql> show tables; Empty set (0.01 sec) mysql> create table zhang_tb (id int(2)); ERROR 1044 (42000): Access denied for user 'zhang'@'%' to database 'zhang_db' mysql>           b)、只能向表里插入数据,但不能查询该表的数据   mysql> grant insert  on zhang_db.* to wang@'%' identified by 'wang'; Query OK, 0 rows affected (0.01 sec)     [root@10 sbin]# mysql -h10.4.5.212 -uwang -pwang zhang_db; Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 12 to server version: 4.1.10a-max-log   Type 'help;' or '\h' for help. Type '\c' to clear the buffer.   mysql> insert into zhang_tb (1); mysql> insert into zhang_tb values (1); Query OK, 1 row affected (0.00 sec)   mysql> select * from zhang_tb; ERROR 1044 (42000): Access denied for user 'wang'@'%' to database 'zhang_db' mysql>                 *************************************************************************************************************         (八)mysql的常见问题     Q: 如何登录MySQL A:使用mysql提供的客户端工具登录 #PATH_TO_MYSQL/bin/mysql -uuser -ppassword dateabase -------------------------------------------------------------------------------------     Q: 忘记MySQL的root密码,怎么修改 A:如果 MySQL 正在运行,首先杀之: killall -TERM mysqld。 启动 MySQL :PATH_TO_MYSQL/bin/mysqld --skip-grant-tables & 就可以不需要密码就进入 MySQL 了。 然后就是 mysql>use mysql mysql>update user set password=password("new_pass") where user="root"; mysql>flush privileges; 重新杀 MySQL ,用正常方法启动 MySQL 一定注意:很多新手没有用password=password("..."),而是直接password="..."所以改掉密码不好使 ----------------------------------------------------------------------------------------       Q: 为什么mysqld起来了,却无法登录,提示"/var/lib/mysql/mysql.sock"不存在 A:这种情况大多数是因为你的mysql是使用rpm方式安装的,它会自动寻找 /var/lib/mysql/mysql.sock 这个文件, 通过unix socket登录mysql。 常见解决办法如下: 1、 创建/修改文件 /etc/my.cnf,至少增加/修改一行 [mysql] [client] socket = /tmp/mysql.sock #在这里写上你的mysql.sock的正确位置,通常不是在 /tmp/ 下就是在 /var/lib/mysql/ 下 ------------------------------------------------------------------------------------------     2、 指定IP地址,使用tcp方式连接mysql,而不使用本地sock方式 #mysql -h127.0.0.1 -uuser -ppassword   3、 为 mysql.sock 加个连接,比如说实际的mysql.sock在 /tmp/ 下,则 #ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock即可 ---------------------------------------------------------------------------------------     如何修改mysql用户密码 大致有2种方法: 1、 mysql>mysql -uroot -pxxx mysql mysql>update user set password=password('new_password') where user='user';; mysql>flush privileges;   2、 格式:mysqladmin -u用户名 -p旧密码 password 新密码 #mysqladmin -uroot -password ab12 注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。   ********************************************************************************************************************************     (九)、mysql的修复:(myisamchk mysqlcheck,optimize table语句)     修复时说明: 在服务器关闭时,或表中没有交互,这时较老的myisamchk比较有用,但需要指定表的路径, mysqlcheck工具能够在服务器还在运行时执行维护工具
还有optimize table语句
  有的时候因为掉电或者其他原因导致数据库损坏,我们可以使用mysql自带的mysqlcheck命令来快速修复所有的数据库或者特定的数据库;例如 检查优化并修复所有的数据库用: 语法:   a) mysqlcheck   mysqlcheck [options] -A             对所有数据库进行修复 mysqlcheck [options] databasename           对指定数据库进行修复 mysqlcheck [options] databasename table     对指定表进行修复         例如: 修复所有的数据库 [root@10 wang_db]# mysqlcheck -A Enter password: mysql.columns_priv                                 OK mysql.db                                           OK mysql.func                                         OK mysql.help_category                                OK mysql.help_keyword                                 OK mysql.help_relation                                OK mysql.help_topic                                   OK mysql.host                                         OK mysql.tables_priv                                  OK mysql.time_zone                                    OK mysql.time_zone_leap_second                        OK mysql.time_zone_name                               OK mysql.time_zone_transition                         OK mysql.time_zone_transition_type                    OK mysql.user                                         OK wang_db.wang_cc                                    OK wang_db.wang_tb                                    OK wang_db_1.wang_tb_1                                OK zhou_db.zhou_tb                                    OK     修复指定的数据库 [root@10 shell]# mysqlcheck wang_db wang_db.wang_tb                                    OK wang_db.zhang_tb                                   OK       修复指定的表 [root@10 shell]# mysqlcheck wang_db wang_tb wang_db.wang_tb                                    OK     一些相关参数说明:   -r 修复大多数错误,除了那些无故出现重复的唯一键 -o 对表进行优化 -p 连接需要密码 -c 检查表 -f 即使遇到错误,仍强制进行处理   .....................等等     b) myisamchk   [root@10 shell]# myisamchk /usr/local/mysql/data/wang_db/wang_tb Checking MyISAM file: /usr/local/mysql/data/wang_db/wang_tb Data records:       5   Deleted blocks:       0 - check file-size - check record delete-chain - check key delete-chain - check index reference - check record links         c) optimize table 语句: mysql> optimize table wang_tb,zhang_tb; +------------------+----------+----------+-----------------------------+ | Table            | Op       | Msg_type | Msg_text                    | +------------------+----------+----------+-----------------------------+ | wang_db.wang_tb  | optimize | status   | Table is already up to date | | wang_db.zhang_tb | optimize | status   | Table is already up to date | +------------------+----------+----------+-----------------------------+ 2 rows in set (0.01 sec)           ----------------------------------------------------------------------------------------------------------   另外如果只是对某个表进行修复可以用:myisamchk或isamchk 其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用: myisamchk tablename.MYI 进行检测,如果需要修复的话,可以使用: myisamchk -of tablename.MYI     例如: [root@10 wang_db]# myisamchk -of wang_tb.MYI - recovering (with keycache) MyISAM-table 'wang_tb.MYI' Data records: 8   --------------------------------------------------------------------------------------------------   关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。 另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前: [ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI 其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。   ************************************************************************************************************************           (十)、mysql的同步复制:     master salve 分别建立两个相同的数据库     建库 mysql> create database wang_db; Query OK, 1 row affected (0.03 sec)   mysql> use wang_db Database changed   建表 mysql> create table wang_tb (id int(2),name varchar(30),address varchar(30)); Query OK, 0 rows affected (0.01 sec)     插入数据 mysql> insert into wang_tb values(1,"wangzhiming", "dalian"); Query OK, 1 row affected (0.00 sec)   mysql> insert into wang_tb values(2,"zhoulijun", "xinmin"); Query OK, 1 row affected (0.00 sec)     编辑my.cnf文件分别加入如下的内容   slave:   server-id      = 2 master-host     = 10.4.5.212 master-user     = root master-password = 123456 master-port     = 3306 replicate-do-db = wang_db   master:   log-bin server-id       = 1 replicate-do-db = wang_db       启动主服务器 启动从服务器:   在从服务器上启动备份: mysql> start slave; Query OK, 0 rows affected, 1 warning (0.00 sec)   a)、查看master的状态: [root@fc4-test shell]# mysql -uroot -p123456 -e 'show master status\G' *************************** 1. row ***************************             File: fc4-test-bin.000017         Position: 79     Binlog_Do_DB: Binlog_Ignore_DB:       b)、查看slave的状态信息: [root@10 data]# mysql -uroot -p123456 -e 'show slave status\G' *************************** 1. row ***************************              Slave_IO_State: Waiting for master to send event                 Master_Host: 10.4.5.212                 Master_User: root                 Master_Port: 3306               Connect_Retry: 60             Master_Log_File: fc4-test-bin.000011         Read_Master_Log_Pos: 79              Relay_Log_File: 10-relay-bin.000027               Relay_Log_Pos: 1458       Relay_Master_Log_File: fc4-test-bin.000011            Slave_IO_Running: Yes           Slave_SQL_Running: Yes             Replicate_Do_DB: wang_db         Replicate_Ignore_DB:          Replicate_Do_Table:      Replicate_Ignore_Table:     Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table:                  Last_Errno: 0                  Last_Error:                Skip_Counter: 0         Exec_Master_Log_Pos: 79             Relay_Log_Space: 1458             Until_Condition: None              Until_Log_File:               Until_Log_Pos: 0          Master_SSL_Allowed: No          Master_SSL_CA_File:          Master_SSL_CA_Path:             Master_SSL_Cert:           Master_SSL_Cipher:              Master_SSL_Key:       Seconds_Behind_Master: 0       c)、查看主服务器的进程信息 [root@fc4-test shell]# mysql -uroot -p123456 -e 'show processlist\G' *************************** 1. row ***************************      Id: 3    User: root    Host: 10.4.5.211:42556      db: NULL Command: Binlog Dump    Time: 1449   State: Has sent all binlog to slave; waiting for binlog to be updated    Info: NULL *************************** 2. row ***************************      Id: 14    User: root    Host: localhost      db: NULL Command: Query    Time: 0   State: NULL    Info: show processlist [root@fc4-test shell]# vi /etc/my.cnf [root@fc4-test shell]# [root@fc4-test shell]# [root@fc4-test shell]# mysql -uroot -p123456 -e 'show processlist\G' *************************** 1. row ***************************      Id: 3    User: root    Host: 10.4.5.211:42556      db: NULL Command: Binlog Dump    Time: 1494   State: Has sent all binlog to slave; waiting for binlog to be updated    Info: NULL *************************** 2. row ***************************      Id: 15    User: root    Host: localhost      db: NULL Command: Query    Time: 0   State: NULL    Info: show processlist         c)、查看从服务器的进程信息: [root@10 data]# mysql -e 'show processlist\G' *************************** 1. row ***************************      Id: 1    User: system user    Host:      db: NULL Command: Connect    Time: 1516   State: Waiting for master to send event    Info: NULL *************************** 2. row ***************************      Id: 2    User: system user    Host:      db: NULL Command: Connect    Time: -1131526   State: Has read all relay log; waiting for the slave I/O thread to update it    Info: NULL *************************** 3. row ***************************      Id: 9    User: root    Host: localhost      db: NULL Command: Query    Time: 0   State: NULL    Info: show processlist [root@10 data]#   以上信息代表同步复制配置成功。               d)、主从切换 要想完成主从切换,必须删除从服务器上的几个文件,要不然不行,因为该文件中记录着一些信息。 master.info relay.info         -----------------------------------------------------------------------------------------                     MYSQL服务器配置   ===================================================================================     安装步骤(主从服务器皆适合)        (一)、建立mfx用户: [root@10 support-files]# useradd mfx [root@10 support-files]# passwd mfx     (二)、目前服务器所需mysql的版本:mysql-max-4.1.10a-pc-linux-gnu-i686.tar.gz   查看mysql版本: [mfx@5a-s03-a3 bin]$ /usr/local/mysql/bin/mysql -uroot -p123456 -e "select version()" +-----------------+ | version()       | +-----------------+ | 4.1.10a-max-log | +-----------------+       (三)、mysql安装: 首先下载合适的二进制包,下载了文件mysql-max-4.1.10a-pc-linux-gnu-i686.tar.gz   开始安装mysql: cd /usr/local tar -zxvf mysql-max-4.1.10a-pc-linux-gnu-i686.tar.gz ln -s mysql-max-4.1.10a-pc-linux-gnu-i686 mysql groupadd mysql useradd -g mysql mysql cd mysql scripts/mysql_install_db --user=mysql chown -R root  . chown -R mysql data chgrp -R mysql . 安装成功!!!!!!     (四)、启动mysql: /usr/local/mysql/support-files/mysql.server start     (五)、创建数据库mysqlafx: mysql> create database mysqlafx; Query OK, 1 row affected (0.05 sec)   到此为止主从服务器的mysql安装成功!!! ==========================================================================================================                                          主服务器       (六)、对mysql数据库的授权操作: 目前mysql主服务器所需要的权限:     主服务器:   mysql> select Host,User,Password,Select_priv,Grant_priv from user; +--------------------------+---------+-------------------------------------------+-------------+------------+ | Host                     | User    | Password                                  | Select_priv | Grant_priv | +--------------------------+---------+-------------------------------------------+-------------+------------+ | localhost                | root    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | Y           | Y          | | 5a-s03-a3.data-hotel.net | root    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | Y           | Y          | | %                        | root    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | Y           | N          | | %                        | batck   | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | N           | N          | | %                        | back    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | N           | N          | | 10.0.154.13              | root    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | Y           | N          | | %                        | phpuser | 565491d704013245                          | N           | N          | +--------------------------+---------+-------------------------------------------+-------------+------------+ 7 rows in set (0.00 sec)     授权语句: grant all privileges on *.* to root@localhost identified by '123456' with grant option;   grant all privileges on *.* to root@'5a-s03-a3.data-hotel.net' identified by '123456' with grant option;   grant all privileges on *.* to root@'%' identified by '123456';   grant all privileges on *.* to root@'10.0.154.13' identified by '123456';     ===================================================================================================================       目前mysql服务器内存大小: [mfx@5a-s03-a3 proc]$ cat meminfo MemTotal:      8248068 kB MemFree:        269268 kB Buffers:         29916 kB Cached:        7159864 kB SwapCached:          0 kB Active:        5337892 kB Inactive:      2411280 kB HighTotal:     7405512 kB HighFree:         4960 kB LowTotal:       842556 kB LowFree:        264308 kB SwapTotal:     8008360 kB SwapFree:      8008184 kB Dirty:          306204 kB Writeback:           0 kB Mapped:         569620 kB Slab:           212504 kB CommitLimit:  12132392 kB Committed_AS:   671452 kB PageTables:       2088 kB VmallocTotal:   114680 kB VmallocUsed:      5448 kB VmallocChunk:   108796 kB HugePages_Total:     0 HugePages_Free:      0 Hugepagesize:     2048 kB     内存大小为8G ==================================================================================================   主服务器配置文件(my.cnf)一些相关参数设置: # The MySQL server [mysqld] port            = 3306 socket          = /tmp/mysql.sock skip-locking key_buffer=512M max_allowed_packet = 1M max_connections=1024 table_cache=1024 sort_buffer=128M net_buffer_length = 8K myisam_sort_buffer_size = 8M default-character-set=ujis record_buffer=64M     [mysqldump] quick max_allowed_packet = 16M     [isamchk] key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M   [myisamchk] key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M   [mysqlhotcopy] interactive-timeout   ****************************************************   同步复制主服务器配置文件需要改的地方: log-bin server-id       = 1   ****************************************************       ============================================================================================================================                                               从服务器             从服务器权限表查看: mysql> select Host,User,Password,Select_priv,Grant_priv from user; +--------------------------+---------+-------------------------------------------+-------------+------------+ | Host                     | User    | Password                                  | Select_priv | Grant_priv | +--------------------------+---------+-------------------------------------------+-------------+------------+ | localhost                | root    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | Y           | Y          | | 5a-s03-a5.data-hotel.net | root    |                                           | Y           | Y          | | 5a-s03-a5.data-hotel.net |         |                                           | N           | N          | | localhost                |         |                                           | N           | N          | | %                        | root    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | Y           | N          | | 10.0.154.13              | root    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | Y           | N          | | %                        | phpuser | 565491d704013245                          | N           | N          | +--------------------------+---------+-------------------------------------------+-------------+------------+ 7 rows in set (0.00 sec)     授权语句: grant all privileges on *.* to root@localhost identified by '123456' with grant option;   grant all privileges on *.* to root@'%' identified by '123456';   grant all privileges on *.* to root@'10.0.154.13' identified by '123456';   ===============================================================================================================               从服务器配置文件(my.cnf)的一些相关参数设置:   [mysqldump] quick max_allowed_packet = 16M       [mysqld] port            = 3306 socket          = /tmp/mysql.sock skip-locking key_buffer=512M max_allowed_packet = 1M max_connections=1024 table_cache=1024 sort_buffer=128M net_buffer_length = 8K myisam_sort_buffer_size = 8M default-character-set=ujis record_buffer=64M   [isamchk] key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M   [myisamchk] key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M   ****************************************   同步复制从服务器需要修该的配置:   log-bin server-id       = 3 master-host     =10.0.154.13 master-user     =root master-password =123456 master-port     =3306 replicate-do-db=mysqlafx   **********************************************   在从服务器上启动备份: mysql> start slave;     查看master的状态: mysql -uroot -p123456 -e 'show master status\G'     查看slave的状态信息: mysql -uroot -p123456 -e 'show slave status\G'   到此为止主从服务器mysql的安装,授权,配置文件,同步复制配置完毕!!!   =============================================================================                     脚本自动安装mysql     脚本的功能:   自动安装mysql,copy mysql配置文(my-large.cnf)件到/etc/目录,mysql启动,创建mysqlafx数据库,对数据库进行授权操作,并对同步复制配置文件相关说明.     #!/bin/bash # # #mysql_install.sh ###################################################### ###################################################### MYSQL_INSTALL_path="/usr/local" MYSQL_FILE_tar="mysql-max-4.1.10a-pc-linux-gnu-i686.tar.gz" MYSQL_FILE="mysql-max-4.1.10a-pc-linux-gnu-i686" MYSQL_start="/usr/local/mysql/support-files/mysql.server" MYSQL_PID="/usr/local/mysql/data/`hostname`.pid" MYSQL_cmd="/usr/local/mysql/bin/mysql" MYSQL_conf="/usr/local/mysql/support-files/my-large.cnf" HOST_name=`hostname` PASS_wd="123456" IP="10.0.154.13" GRANT_1="grant all privileges on *.* to root@localhost identified by '$PASS_wd' with grant option" GRANT_2="grant all privileges on *.* to root@'$HOST_name' identified by '$PASS_wd' with grant option" GRANT_3="grant all privileges on *.* to root@'%' identified by '$PASS_wd'" GRANT_4="grant all privileges on *.* to root@'$IP' identified by '$PASS_wd'" ######################################### #mysql.tar ########################################## cd $MYSQL_INSTALL_path if [ -f $MYSQL_FILE_tar ] then tar -zxvf $MYSQL_FILE_tar else echo "mysql install file not have!" exit 1 fi ############################################ #mysql_install ############################################ groupadd mysql useradd -g mysql mysql cd $MYSQL_INSTALL_path ln -s  $MYSQL_FILE mysql cd mysql scripts/mysql_install_db --user=mysql chown -R root  . chown -R mysql data chgrp -R mysql . cp $MYSQL_conf /etc/my.cnf ############################################ #mysql_start ############################################ $MYSQL_start start sleep 5 if [ -f $MYSQL_PID ] then echo "mysql start sucessfull!!!" else echo "mysql start fail!!!" fi ############################################ #create database ############################################ $MYSQL_cmd -e "create database mysqlafx" $MYSQL_cmd -e "show databases" ############################################ #mysql_grant ############################################ echo "*********select Host,User,Password,Select_priv,Grant_priv from user;*************" $MYSQL_cmd -e "$GRANT_1;$GRANT_2;$GRANT_3;$GRANT_4" $MYSQL_cmd -p$PASS_wd -e "use mysql;select Host,User,Password,Select_priv,Grant_priv from user;" echo " " echo "****************master config file******************" echo "log-bin" echo "server-id         =1" echo " " echo "*****************slave config file*******************" echo "log-bin" echo "server-id         =3" echo "master-host       =$IP" echo "master-user       =root" echo "master-port       =3306" echo "replicate-do-db   =mysqlafx"              
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载