mysql学习笔记

如果--host是localhost,系统则会用一个UNIX套接字去连接数据库服务器,这时要使用--socket选项,所以查询语句变成:

% mysqladmin --host=localhost --socket=/path/to/socket variables
mysql> SHOW VARIABLES LIKE 'datadir';
在windows NT平台上可以使用“.”作为一条命名管道连接的主机名,用--socket选项给出命名管道的名字,如:

c:\ mysqladmin --host=. --socket=pipe_name variables
配置文件的中[mysqld]段中的datadir=/path/to/datadir设置也可查询到数据目录。
在mysqld程序的帮助信息里也有程序编译时默认的数据目录信息,可用以下命令显示:

% mysqld --help

数据目录是存放数据文件的地方,每个数据库对应目录的不同文件。InnoDB数据表由于用表空间来管理数据库,所以就没这种对应关系。但也是保存在数据目录中的,在数据目录除保存数据库文件外,还可能会保存以下几类文件:


服务器的配置文件,my.cnf;
服务器的进程ID(PID)文件;
服务器的日志文件和状态文件,这些文件对管理数据库有重要的价值;
DES密钥文件或服务器的SSL证书与密钥文件。

数据目录中的所有数据库全部由服务器(mysqld)来管理,客户端不直接操作数据。服务器是客户使用数据的唯一通道。

在MySQL中,每个数据库其实就是在数据目录下一个子目录,show databases命令相当于列出数据目录中的目录清单。create database db_name命令会在数据目录下新建一个db_name的目录,以存放数据库的数据文件。所以我们也可下面的shell命令方式来建立一个空数据库:

% cd datadir % mkdir db_name % chmod u=rwx,go-rwx db_name

同理,删除数据库drop database db_name也就是删除数据目录中一个名为db_name的目录及目录中的数据表文件。我们也可用shell这进行操作:

% cd datadir % rm -rf db_name


比较shell方式与drop database方式,drop database db_name命令不能删除db_name目录中创建的其它非数据表文件;由于InnoDB是表空间来管理数据表,所以不能用rm或del命令删除InnoDB的数据表。

3.2. MySQL数据表在系统中表现形

MySQL数据表类型有:ISAM、MyISAM、MERGE、BDB、InnoDB和HEAP。每种数据表在文件系统中都有不同的表示方式,有一个共同点就是每种数据表至少有一个存放数据表结构定义的.frm文件。下面介绍每种数据表文件:


ISAM数据表是最原始的数据表,有三个文件,分别是:

.frm,存放数据表的结构定义;

.ISD,数据文件,存放数据表中的各个数据行的内空;

.ISM,索引文件,存放数据表的所有索引信息。
MyISAM数据表是ISAM数据表的继承者,也有三个文件,分别是:

.frm,结构定义文件;

.MYD,数据文件;

.MYI,索引文件。
MERGE数据表是一个逻辑结构,代表一组结构完全相同的MyISAM数据表构成的集合。它在文件系统中有二个文件,分别是:

.frm,结构定义文件;

.MRG,构成MERGE表的MyISAM数据表清单,每个MyISAM数据表名占一行。也就是说可通过改变该表的内容来改变MERGE数据表的结构。修改前请先刷新缓存(flush tables),但不建议这样修改MERGE数据表。
BDB数据表用两个文件来表示,分别是:

.frm,结构定义文件;

.db,数据表数据和索引文件
InnoDB由于采用表空间的概念来管理数据表,所以它只有一个与数据表对应.frm文件,同一目录下的其它文件表示为表空间,存储数据表的数据和索引。
HEAP数据表是一个存在于内存中的表,所以它的数据和索引都存在于内存中,文件系统中只有一个.frm文件,以定义结构。

了解MySQL数据表在文件系统中表现形式后,我们可知道,创建、修改或删除数据表,其实就是对这些文件进行操作。例如一些数据表(除InnoDB和HEAP数据表外),我们可直接在文件系统中删除相应的文件来删除数据表。

% cd datadir % rm -f mydb/mydb.*

以上命令可删除mydb数据库中的mydb数据表。

3.3. 数据表最大尺寸限制

在MySQL中影响数据表尺寸的因素有很多,下面分别进行介绍:


MySQL数据表类型的不同对数据表尺寸的限制:


ISAM数据表中单个.ISD和.ISM文件的最大尺寸为4G;
MyISAM数据表中单个.MYD和.MYI文件的默认最大尺寸也是4G,但可在创建数据表时用AVG_ROW_LENGTH和MAX_ROWS选项把这个最值扩大到800万TB。
MERGE数据表的最大尺寸是它的各组成MyISAM数据表的最大尺寸之和。
BDB数据表的尺寸受限于BDB处理程序所允许的.db文件的最大尺寸。这个最大尺寸随着数据表页面尺寸(编译时确定)而变化,但即使是最小的页面尺寸(512字节),.db文件的最大尺寸也可达2TB。
InnoDB数据表的表空间的最大尺寸是40亿个页面,默认的页面尺寸是16K,该值可在8K到64K之间,在编译时确定。InnoDB数据表的最大尺寸也就是表空间的最大尺寸。
操作系统对文件的尺寸限制,一般文件系统都对单个文件不得超过2G的限制。该约束会对数据库文件造成限制。InnoDB数据表可通过利用未格式化硬盘作为表空间来绕过该限制。
对于数据和索引分开两个文件存放的数据表,其中任何一个文件达到操作系统文件的最大限制,数据库表也就达到最大尺寸。
包含AUTO_INCREMENT数据列的表受到该数据列类型最大上限值的限制。
由于InnoDB数据表用表空间来管理,一个表空间可同时空纳多个数据表,所以数据表的最大尺寸受系统文件和同一表空间中数据表空间的约束。

3.4. 状态文件和日志文件

在MySQL数据目录中还包含着许多状态文件和日志文件,这些文件的文件名都是以主机名加上相关后缀来命名的。下面是这些文件的一个说明列表:

Table 3.1. 状态文件和日志文件
文件类型 默认名

文件内容

进程ID文件 hostname.pid MySQL服务器进程的ID

常规查询日志 hostname.log 连接/断开连接事件和查询信息

慢查询日志 hostname-slow.log 记录查询时间很长的命令信息

变更日志 hostname.nnn 创建或修改数据表结构和内容的查询命令信息

二进制变更日志 hostname-bin.nnn 创建或修改数据表结构和内容的查询命令的二进制表示法

二进制变更日志的索引文件 hostname-bin.index 使用中的“二进制变更日志”列表

错误日志 hostname.err 记录“启动/关闭”事件和异常情况

变更日志和二进制变更日志主要用于MySQL数据库服务器的崩溃恢复中,由于变更日志记录了数据库的所有变更操作,所以可以进行事件重放。具体操作请参考相关数据库备份恢复章节。对于变更日志,我们可用--log-long-format选项来让它以扩展方式记录有关事件。扩展方式可记录谁发出查询和什么时候发出查询的信息。可使我们更好地掌握客户端的操作情况。日志记录着查询命令的所有操作,里面可能会有一些敏感信息。所以我们要确保日志文件的安全。

3.5. 调整MySQL数据目录位置

MySQL数据库的数据目录位置,包括目录里的各种文件的位置)可根据实际情况进行调整。调整的方法有两种,一种是使用符号链接;一种用服务器启动选项。下面一个列表说明了数据目录及目录中文件各自适宜采用的方法:

Table 3.2. MySQL数据目录及目录中文件位置的调整方法
调整对象

适用方法

整个数据目录 启动选项和符号链接

数据库目录 符号链接

数据表 符号链接

InnoDB数据表空间 启动选项

PID文件 启动选项

日志文件 启动选项

下面是各种调整方法的具体操作过程:


在调整MySQL的数据目录时,要先停止服务器,再把数据目录移动到新的位置。接着,我们可选择在原来目录下创建一个符号链接指向新的位置,或者用启动选择--datadir指向新的数据目录。推荐用创建符号链接的方法,因为如果那个数据目录中有my.cnf文件,相应的服务器还能找到它。
数据库只能存在于MySQL数据目录中,所以只能使用符号链接的方法调整它的位置。在Linux系统的操作步骤如:


关闭服务器;
把数据库目录拷贝到新的位置;
删除原来的数据库目录;
在原来的MySQL数据目录中创建一个同名符号链接指向新的位置;
重新启动服务器。

在windows下的操作方法不些不同,操作方法如下:


关闭服务器;
把数据库目录移动新的位置;
删除原来的数据库目录;
在原来数据目录下建一个同名的.sym文件,在文件中输入数据库新目录的全路径,如c:\mysql\newdir\mydb。这个文件就相当于Linux下的符号链接;
重启服务器。


为了支持符号链接功能,必须用--use-symbolic-links选项启动服务器;或在选项文件的[mysqld]节中添加use-symbolic-links选项。
MySQL必须是3.23.16以上版本且是max服务器(mysqld-max或mysqld-max-nt)。
要移动数据表,必须满足以下所有条件才行:


MySQL的版本必须是4.0或以上的版本;
操作系统必须有一个可用的realpath()调用;
移动的数据表必须是MyISAM类型的数据表。

在满足以上所有条件后,我们就可把.MYD数据文件和MYI索引文件移到新位置,再在原来位置创建两个同名符号链接指定新的位置。注意,.frm定义文件仍需留在原来的数据库目录中。

如以上条件不能全部满足,最好不要移动数据表文件。否则一旦你运行ALTER TABLE、OPTIMIZE TABLE、REPAIR TABLE语句对移动过的数据表进行优化或修改,这样数据表就会回到原来的位置,使移动操作失效。因为这些命令的执行过程是这样的:它会先在数据目录中创建一个临时数据表并对这个临时数据表进行优化或修改,然后删除原来的数据表(这里是你为了移动数据表而创建的一个符号链接),再把临时数据表更名为原来的数据表名称。这样一来,你移走的数据表就和这个数据库完全没有关系了。基于以下的不稳定因素,如无特殊必要,不建议移动数据表。
InnoDB表空间是通过在选项文件中使用innodb_data_home_dir和innodb_data_file_path选项列出InnoDB表空间组成文件清单的方法来配置的,所以我们可通过修改这些选项来重新安置InnoDB表空间的组成文件。步骤如下:


关闭服务器;
移动组成表空间的文件;
修改选项文件,指出组成表空间的文件的新位置;
重启服务器。
状态文件和日志文件的位置可通过选项文件或启动服务器时指定。

Chapter 4. MySQL数据库日常管理

Table of Contents

4.1. 数据库安全管理

4.2. 服务器的启动和关闭

4.3. 连接故障恢复

4.4. MySQL用户帐号管理

4.5. 日志文件管理

4.5.1. 日志失效处理

4.6. MySQL服务器的一些优化配置

4.7. 优化服务器

4.8. 运行多个MySQL服务器

4.9. MySQL服务器镜像配置

为了确保数据库平稳可靠运行,我们需进行维护和管理,这是每一位数据库管理员的职责。下面分几个专题分别介绍。

4.1. 数据库安全管理

MySQL数据库通过用户和密码来控制用户对数据库的访问,当我们新安装了一个数据库服务器时,MySQL的权限表设置是很不安全,它默认允许任何人不需要密码就可访问数据库。所以我们安装好服务器后第一件需要做的就是设置用户密码。

在MySQL中的mysql数据库的user数据表中存有用户的帐号信息,在初始状态下已存在root和一些匿名用户,且所有用户都没有设置密码。该数据表的这些用户信息是通过一个mysql_install_db脚本安装的。该表的主要列有:


User,连接数据库的用户名。
Host,允许连接到数据库服务器的主机名,“%”通配符代表所有主机。
Password,连接密码,已加密。
其它权限列,以“Y”或“N”标识是否有效。

在这种状态下的数据库是极不安全的,我们可用以下命令轻易地访问数据库:

% mysql -h localhost -u root #通过本地主机,root用户访问,不需要密码验证 % mysql -h localhost #通过本地主机,匿名用户访问,不需要密码验证

设置MySQL用户帐号密码的方法有三种:


使用mysqladmin程序:

% mysqladmin -h localhost -u root password "password" #设置在本地以root身分登录的密码 % mysqladmin -h remote -u root password "password" #设置远程主机以root身分登录的密码

在初始设置时,这两条语句都要运行,以确保数据库本地访问和网络访问的安全。
通过set password这条SQL语句设置:

mysql> set password for 'root'@'localhost' = password('password'); mysql> set password for 'root'@'remote' = password('password');
直接修改user权限表:

mysql> use mysql; mysql> update user set password=password('password') where user='root'; mysql> flush privileges; #重载权限表,使修改马上生效

MySQL使用驻留在内存中的权限表拷贝来进行访问控制,当使用mysqladmin和set password设置密码,MySQL会监察到权限表已被修改,它自动重载该表。而用update的方式,MySQL就监察不到变化,需手动用flush privileges命令刷新内存中的权限表,以使它马上生效。

为root用户设置密码后,如果需以root身份连接数据库,就需验证密码。我们可用以下语句连接数据库:

% mysql -u root -p Enter password: #输入root的密码

在user表中,user列为空的为匿名用户。它也是没有密码的,我们需为它们设置一个密码,或干脆把它们删除。在windows系统上的本地匿名用户帐号和root用户有着同样的权限,这是一个很大的安全漏洞。应该把它删除或把权限削弱。

4.2. 服务器的启动和关闭

在Linux和windows平台下MySQL服务器的启动方式有很大不同,这里将分开介绍:


Linux平台:

Linux平台下,每一个进程都需由一个用户来运行,MySQL最好不要以root用户来运行。我们可创建一个mysql用户和mysql组,MySQL服务器程序目录和数据目录由这个用户和组所拥有,其它用户没有任何权限。以mysql用户来运行MySQL服务器。

% mysqld --user=mysql #即使以root用户执行该命令,MySQL数据库还是会与mysql用户ID关联。

为了使服务器在系统启动时自动以mysql用户运行,需配置my.cnf配置文件 ,把user=mysql包含在[mysqld]段中。

关闭服务器可用% mysql.server stop或% mysqladmin -u root -p shutdown
windows平台:

手动方式:直接运行c:\mysqld命令。

作为服务方式:运行c:\mysqld-nt --install命令,把mysqld-nt安装为windows的服务,此后,每当windows启动时,它就会自动运行。mysqld-nt是一个支持命名管道的MySQL服务器。运行c:\mysqld-nt --remove可把服务删除。手动启动关闭服务的方法是运行c:\net start mysql和c:\net stop mysql命令。

4.3. 连接故障恢复

当由于误删mysql套接字时(/tmp/mysql.sock),我们就不能通过套接字连接服务器。这时我们可通过tcp/ip来连接服务器,要建立一个tcp/ip连接,需用127.0.0.1代替locahost作为-h参数的值来连接服务器。如:

% mysqladmin -h 127.0.0.1 -u root -p shutdown #关闭服务器再重启会重建套接字

当我们因为忘记root用户密码而不能连接服务器时,重设置密码的步骤如:


用 % kill -TERM PID关闭服务器,用-TERM信息可使服务器在关闭前把内存中的数据写入磁盘。如果服务器没有响应,我们可用% kill -9 PID来强制删除进程,但不建议这样做。这时内存中的数据不会写入磁盘,造成数据不完整。如果你是用mysql_safe脚本启动MySQL服务器的,这个脚本会监控服务器的运行情况并在它被终止时重启服务器,所以如需关闭服务器,要先终止该进程,然后再真正终止mysqld进程。
接着用--skip_grant-tables启动服务器。这时MySQL服务器将不使用权限表对连接操作进行验证。你就可在不提供root密码的情况下连接上服务器,并获得root的权限。这样你就可用上面介绍的修改密码的方法重设root用户的密码。注意:连接上服务器后,要马上执行flush privileges命令,使权限表读入内存并生效,以阻止其他的连接。该语句还重新激活grant语句,在MySQL服务器不使用权限表时,grant语句被禁用。
修改完root用户密码后,我们就可关闭服务器并重启使所有配置正常运作。

4.4. MySQL用户帐号管理

MySQL用户帐号管理主要用grant(授权)和revoke(撤权)两个SQL指令来管理。这两个指令实质是通过操作user(连接权限和全局权限)、db(数据库级权限)、tables_priv(数据表级权限)、columns_priv(数据列级权限)四个权限表来分配权限的。host权限表不受这两个指令影响。下面将会详细介绍用户权限管理的内容。


GRANT语法说明:

GRANT privileges (columns) #privileges表示授予的权限,columns表示作用的列(可选) ON what #设置权限级别,全局级、数据库级、数据表级和数据列级 TO account #权限授予的用户,用"user_name"@"host_name"这种用户名、主机名格式 IDENTIFIED BY 'password' #设置用户帐号密码 REQUIRE encryption requirements #设置经由SSL连接帐号 WITH grant or resource management options; #设置帐号的管理和资源(连接服务器次数或查询次数等)选项

示例:

mysql>grant all on db.* to 'test'@'localhost' identified by 'test'; 上例运行后的效果是,test用户只能通过‘test’密码从本机访问db数据库 mysql>grant all on db.* to 'test'@'%' identified by 'test'; 上例运行后的效果是,test用户可通过‘test’密码从任意计算机上访问db数据库。‘%’代表任意字符,‘_’代表一个任意字符。主机名部份还可以是IP地址。


如果没有给定主机部份,则默认为任意主机,也就是'test'和'test'@'%'是等价的。
Table 4.1. 访问权限表
权限

权限说明

CREATE TEMPORARY TABLES 创建临时数据表

EXECUTE 执行存储过程(暂不支持)

FILE 操作系统文件

GRANT OPTION 可把本帐号的权限授予其它用户

LOCK TABLES 锁定指定数据表

PROCESS 查看运行着的线程信息

RELOAD 重新加载权限表或刷新日志及缓冲区

REPLICATION CLIENT 可查询主/从服务器主机名

REPLICATION SLAVE 运行一个镜像从服务器

SHOW DATABASES 可运行SHOW DATABASES指令

SHUTDOWN 关闭数据库服务器

SUPER 可用kill终止线程以及进行超级用户操作

ALTER 可修改表和索引的结构

CREATE 创建数据库和数据表

DELETE 删除数据表中的数据行

DROP 删除数据表和数据行

INDEX 建立或删除索引

INSERT 插入数据行

REFERENCES (暂时不支持)

SELECT 查询数据行

UPDATE 更新数据行

ALL 所有权限,但不包括GRANT。

USAGE 无权限权限
Table 4.2. 权限作用范围(由ON子句设置)
权限限定符

作用范围

ON *.* 全局级权限,作用于所有数据库

ON * 全局级权限,若未指定默认数据库,其作用范围是所有数据库,否则,其作用范围是当前数据库

ON db_name.* 数据库级权限,作用于指定数据库里的所有数据表

ON db_name.tbl_name 数据表级权限,作用于数据表里的所有数据列

ON tbl_name 数据表级权限,作用于默认数据库中指定的数据表里的所有数据列
USAGE权限的用法:修改与权限无关的帐户项,如:

mysql>GRANT USAGE ON *.* TO account IDENTIFIED BY 'new_password'; #修改密码 mysql>GRANT USAGE ON *.* TO account REQUIRE SSL; #启用SSL连接 mysql>GRANT USAGE ON *.* TO account WITH MAX_CONNECTIONS_PER_HOUR 10; #设置资源
拥有WITH GRANT OPTION权限的用户可把自已所拥用的权限转授给其他用户,如:

mysql>GRANT ALL ON db.* TO 'test'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; 这样test用户就有权把该权限授予其他用户。
限制资源使用,如:

mysql>GRANT ALL ON db.* TO account IDENTIFIED BY 'password' WITH MAX_CONNECTIONS_PER_HOUR 10 MAX_QUERIES_PER_HOUR 200 MAX_UPDATES_PER_HOUR 50; 允许account用户每小时最多连接20次服务器,每小时最多发出200条查询命令(其中更新命令最多为50条)

默认都是零值,即没有限制。FLUSH USER_RESOURCES和FLUSH PRIVILEGES可对资源限制计数器清零。
REVOKE语法说明:

mysql>REVOKE privileges (columns) ON what FROM account;

示例:

mysql>REVOKE SELECT ON db.* FROM 'test'@'localhost'; 删除test帐号从本机查询db数据库的权限

REVOKE可删除权限,但不能删除帐号,即使帐号已没有任何权限。所以user数据表里还会有该帐号的记录,要彻底删除帐号,需用DELETE命令删除user数据表的记录,如:

% mysql -u root -p mysql>use mysql mysql>DELETE FROM user where User='test' and Host='localhost'; mysql fulsh privileges;

REVOKE不能删除REQUIRE和资源占用的配置。他们是要用GRANT来删除的,如:

GRANT USAGE ON *.* TO account REQUIRE NONE; #删除account帐号的SSL连接选项 GRANT USAGE ON *.* TO account WITH MAX_CONNECTIONS_PER_HOUR 0 MAX_QUERIES_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0; #删除account帐号的资源限制

4.5. 日志文件管理

有关MySQL的日志文件前面章节已简要讨论过了,主要有四种日志文件,分别是常规查询日志、慢查询日志、变更查询日志和二进制变更日志。这些日志文件的创建需在启动服务器时用选项指定。

Table 4.3. 日志启动选项
启动选项

激活日志

--log[=file_name] 常规日志文件

--log-bin[=file_name] 二进制变更日志文件

--log-bin-index=file_name 二进制变更日志文件索引文件

--log-update[=file_name] 变更日志文件

--log-slow-queries[=file_name] 慢查询日志文件

--log-isam[=file_name] ISAM/MyISAM日志文件

--log-long-format 设置慢查询日志和变更日志的格式

BDB和InnoDB数据表的日志文件会自动创建不用指定选项。但可用以下选项指时日志文件的存放路径。

Table 4.4. BDB和InnoDB数据表日志选项
启动选项 用途

--bdb-logdir=dir_name 存放BDB日志文件的位置

--innodb-log_arch_dir=dir_name 存放InnoDB日志文件的归档目录

--innodb_log_group_home_dir=dir_name 存放InnoDB日志文件的位置

MySQL日志文件选项可在mysqld和mysqld_safe脚本中使用,也可在选项文件my.cnf的[mysqld]中使用。推荐在选项文件中使用,因为每次启动服务器的日志选项基本上都是一致的。

日志的刷新可用mysqladmin flush-logs命令或flush logs语句实现。另外,对MySQL服务器发送一条SIGHUP信号也会刷新日志。错误日志和DBD/InnoDB日志不能用以上方法刷新。

错误日志记录MySQL数据库系统的论断和出错信息,由mysqld_safe脚本创建,文件名默认为hostname.err,也可通过--err-log或选项文件的err-log语句指定另外的名字。如果直接用mysqld程序启动服务器,错误信息会直接输出到输出设备,也就是屏幕。但我们可用重定向方法把错误信息输出到其它地方,如把错误信息输出到/var/log/mysql.err文件中,可以执行以下语句:

% mysqld > /var/log/mysql.err 2>&1 &

在windows平台下,MySQL服务器默认把诊断信息写到数据目录的mysql.err文件中,并且不允许另外指定错误日志文件名。如在启动MySQL服务器时给出了--console选项,则MySQL会把诊断信息输出到控制台窗口而不创建错误日志。但如MySQL是作为一个服务运行,则--console选项不起作用。

4.5.1. 日志失效处理

在服务器正常运行中,会产生大量的日志文件。我们要对这些日志文件进行失效管理,以节省磁盘空间和方便查询。进行日志失效处理的方式主要有以下几种:


日志轮转。该方法适用于常规查询日志和慢查询日志这些文件名固定的日志文件,在日志轮转时,应进行日志刷新操作(mysqladmin flush-logs命令或flush logs语句),以确保缓存在内存中的日志信息写入磁盘;

日志轮转的操作过程是这样的:第一次轮转时,把log更名为log.1,然后服务器再创建一个新的log文件,在第二轮转时,再把log.1更名为log.2,把log更名为log.1,然后服务器再创建一个新的log文件。如此循环,创建一系列的日志文件。当到达日志轮转失效位置时,下次轮转就不再对它进行更名,直接把最后一个日志文件覆盖掉。例如:如果每天进行一次日志轮转并想保留最后7天的日志文件,就需要保留log.1--log.7共七个日志文件,等下次轮转时,用log.6覆盖原来的log.7成新的log.7,原来的log.7就自然失效。下面是一个失效处理的shell脚本,以供参考:

#!/bin/sh # shell script --- rotate_log.sh if [ $# -ne 1 ]; then echo "Usage: logname" 1>&2 exit 1 if logfile= mv $logfile.6 $logfile.7 mv $logfile.5 $logfile.6 mv $logfile.4 $logfile.5 mv $logfile.3 $logfile.4 mv $logfile.2 $logfile.3 mv $logfile.1 $logfile.2 mv $logfile $logfile.1 mysqladmin -u flush -pflushpass flush-logs #执行mysqladmin flush-logs会打开一个日志文件----重新生成一个新的日志文件

该脚本以日志文件名为参数,执行方法如下:

% rotate_log.sh /usr/local/mysql/data/log

注意,脚本中的mysqladmin命令是带有-u和-p参数的,因为我们进行日志刷新时需连接服务器。为确保安全,我们建立一个flush用户,密码为flushpass。该用户只有日志刷新的权限(reload权限)。创建该用户的语句如下:

GRANT RELOAD ON *.* TO 'flush'@'localhost' IDENTIFIED BY 'fulshpass';

设置好后,我们就可利用系统的自动处理机制定期运行该脚本以生成轮转日志。在Linux系统上的MySQL发行版中带有一个用来安装mysql-log-rotate日志轮转脚本的logrotate工具,如用RPM安装,则在/usr/share/mysql目录,如用二进制方式安装,则在MySQL安装目录的support-files目录,如用源码安装,则在安装目录的share/mysql目录中。

在windows平台下,不能在线更名,需停掉服务器,再进行。下面是一个进行日志更名的批处理文件:

@echo off REM script name : rotate_log.bat if not "%1" == "" goto ROTATE @echo Usage: rotate_log logname goto DONE :ROTATE set logfile=%1 erase %logfile%.7 rename %logfile%.6 %logfile%.7 rename %logfile%.5 %logfile%.6 rename %logfile%.4 %logfile%.5 rename %logfile%.3 %logfile%.4 rename %logfile%.2 %logfile%.3 rename %logfile%.1 %logfile%.2 rename %logfile% %logfile%.1 :DONE

该脚本的执行方法如下:

c:\rotate_log c:\mysql\data\log
以时间为依据对日志进行失效处理。该方法将定期删除超过给定时间的日志文件,适用于变更日志和二进制日志等文件名用数字编号标识的日志文件。下面是一个用Perl写成的处理脚本:

#!/usr/bin/perl -w # script name: expire_log.pl # Usage: expire_log.pl logfile ... use strict die "Usage: logfile ...\n" if @ARGV == 0; my $max_allowed_age = 7; #max allowed age in days foreach my $file (@ARGV) #chack each argument { unlink ($file) if -e $file && -M $file >= $max_allowed_age; } exit(0);

该脚本需提供一个将被轮转的日志文件名作为参数,如:

% expire_log.pl /usr/local/mysql/data/log.[0-9]*


在给脚本参数时请小心,如给出*为参数,则会删除目录中所有更新时间大于7天的文件。
镜像机制。把日志文件镜像到所有的从服务器上。要使用镜像机制,你必须知道主服务器有多少个从服务器,哪些正在运行,并需依次连接每一个从服务器并发出show slave status语句以确定它正处理主服务器的哪个二进制日志文件(语句输出列表的Master_Log_File项),只有所有的从服务器都不会用到的日志文件才能删除。删除方法是在主服务器上发出以下语句:

mysql> PURGE MASTER LOGS TO 'last_log.xx';

上面语句中的last_log.xx是所有从服务器已处理的最小编号日志文件。

4.6. MySQL服务器的一些优化配置


服务器的监听端口设置


TCP/IP端口3306是MySQL服务器默认的网络监听端口,如用--skip-networking选项启动服务器,则不监听TCP/IP端口。可用--port端口另行指定一个监听端口。如服务器主机有多个IP,还可用--bind-address选项对服务器在监听客户连接时使用的IP地址进行设定。
在UNIX系统上,MySQL可在一个UNIX域套接字文件上监听有无本地客户在试图以localhost为主机名进行连接。默认的套接字文件是/tmp/mysql.sock,可用--socket选项指定另外一个套接字文件。
在基于NT的Windows平台上,有-nt的MySQL服务器都支持命名管道。默认的命名管道是MySql,可用--socket选项另行指定。
启用或禁用LOAD DATA语句的LOCAL能力


可在MySQL服务器编译时,用configure脚本的--enable-local-infile或--disable-local-infile选项把LOAD DATA语句的LOCAL能力设置为启用或禁用;
在MySQL服务器启动是,可以用--local-infile或--disable-local-infile选项来启用或禁用服务器的LOCAL能力(在MySQL 4.0.2之前的版本里,要用--local-infile=0来禁用它)。

如果在服务器端禁用了LOCAL的能力,则客户端就不能使用该功能;如服务器启用了LOCAL的能力,客户端默认也是禁止使用的,但可用mysql程序的--local-infile选项启用它。
国际化和本地化,国际化是指软件能够在世界多个国家地区使用,而本地化则是指可从国际化软件中选择一套适合本地区的语言和习惯的设置来使用。在MySQL中的国际化和本地化设置有以下几方面内容:


时区,如果时区设置不对,则服务器显示的时间将会和当地时间有冲突。设置方法可通过mysqld_safe脚本的--timezone选项来设置,但最好还是在选项文件里设置,如:

[mysqld_safe] timezone=US/Central
配置显示信息的语言,MySQL能用多种语言来显示诊断信息与出错信息,默认是英语。查看share/mysql目录下有几个以语言名称作为目录名的目录就可知道有哪些语言可供选择。可用--language启动选项来指定语言,如--language=/usr/local/mysql/share/mysql/french。
配置服务器的字符集,MySQL支持多种字符集,可在share/mysql/charsets目录下查询支持的字符集,也可用show variables like 'character_sets'来显示支持的字符集清单。MySQL把latin1作为默认的字符集。可在编译时用--with-charset指定另外一个字符集为默认字符集。如要增加另外的字符集支持,可用--with-extra-charasets选项进行添加。如:

% ./configure --with-extra-charsets=latin1,gb2312,big5

--with-extra-charsets有两个特殊的选项,一个是all,代表所有可用字符集;一个是complex,代表所有的复杂字符集(包括多字节字符集和有特殊排序规则的字符集)。

服务器启动时,使用默认字符集,如需指定另外的字符集,需用--default-character-set选项指明。

在MySQL 4.1以前,如果在创建好数据表后改变服务器的默认字符集,就需对索引重新排序才能保证索引键值能够正确反映出数据表记录在新字符集下的排列顺序。重新排序的操作命令如下:

% myisamchk --recover --quick --set-character-set=gb2312 #在执行该语句需关闭服务器,适用于MyISAM数据表 也可用: % mysqlcheck --repair --quick #不需关闭服务器,适用于各种数据表 或者用: mysql> REPLACE TABLE ... QUICK;

在客户端,可用--default-character-set选项指定客户程序使用的字符集。--character-sets-dir选项可指出字符集文件的安装目录。
升级数据表到4.1,支持多字符集数据表。步骤如下:


用mysqldump程序备份数据库:

% mysqldump -p -u root --all-databases --opt > dumpfile.sql --all-databases选项的作用是转储所有数据库; --opt选项的作用是对转储文件进行优化。
关闭服务器,升级MySQL服务器软件到4.1版。
用备份文件重新加载数据表:

% mysql -p -u root < dumpfile.sql

这样,字符集信息就被分配到每一个数据列中,此后,即使服务器改变了默认的字符集,各数据列的字符集也不会改变。当以后修改某个数据列的字符集时,服务器会自动重索引,以反映最新变化。
配置InnoDB表空间。InnoDB表空间在逻辑上是一个连接的存储区域,但实际上是由一个或多个磁盘文件组成。这些文件可以是普通的文件,也可以是一个未格式化的原始硬盘分区。InnoDB表空间通过一系列的配置选项来设置,其中最重要的有以下两个:

为确保服务器每次启动时都能调用同样的选项,InnoDB的选项最好存放到选文件中。下面是一个例子:

innodb_data_home_dir = innodb_data_file_path=/usr/loca/mysql/data/idbdata1:10M:autoextend:max:100M 说明: InnoDB表空间文件默认存放到了MySQL的数据目录中,名字叫idbdata1; 文件长度为10M; 可自动扩展,以8M为步长扩展,如有多个数据文件,只允许最后一个文件可自动扩展; 规定了最大的可扩展尺寸为100M。


innodb_data_home_dir,设置InnoDB表空间各组成文件的父目录,如果没有指出,则默认是MySQL的数据目录。
innodb_data_file_path,描述InnoDB主目录中各有关文件,包括文件名,文件长度和一些选项。各文件以分号分隔,各组成文件长度至少为10M。

把选项写入选项文件后,启动服务器就可自动创建和初始化InnoDB表空间。

利用原始磁盘分区作为InnoDB表空间可创建一个非常大的表空间,不受操作系统单文件最大容量的限制。并且能有效减少磁盘碎片的产生。要使用原始磁盘分区,需作如下配置:


首先,要进行初始化,在选项文件的[mysqld]中配置:

innodb_data_home_dir= innodb_data_file_path=/dev/hda1:10Gnewraw #初始化/dev/hda1这个10G容量的分区

启动服务器,服务器会对这个10G的分区进行初始化。
接着,关闭服务器,修改配置文件,把newraw改为raw,如:

innodb_data_home_dir= innodb_data_file_path=/dev/hda1:10Graw

重新启动服务器,MySQL就会以读/写方式使用该表空间了。在windows平台上配置InnoDB表空间时,windows路径名中的反斜杠可以写成单个的斜线字符(/)。也可写成两个反斜杠(\)。如:

innodb_data_home_dir= innodb_data_file_path=c:/mysql/data/ibdata1:10M;d:/ibdata2:20M

默认情况下,InnoDB的日志文件会存储在MySQL的数据目录,文件名以ib开头。一旦完成InnoDB表空间的初始化,就不能改变组成文件的大小,但可通过添加数据文件或设置自动扩展来增加表空间容量。如需通过增加文件的方法扩大表空间的容量,可按以下步骤进行:


关闭正在运行的MySQL服务器
如果InnoDB表空间的最后一个组成文件是可自扩展的,就要先把它改变成一个固定长度文件才能把另一个文件添加到它后面。方法是先计算出该文件的近似大小,重新设置,如:

innodb_data_file_path=ibdata1:100M:autoextend 改成: innodb_data_file_path=ibdata1:150M
把新的组成文件添加到文件清单的末尾,该文件可以是普通文件,也可以是一个原始硬盘分区。
重启服务器。

还有一种方法重新配置InnoDB表空间,就是先备份,再重新配置,最后重新加载备份。具体步骤如下:


使用mysqldump备份整个InnoDB数据库;
关闭服务器,删除所有InnoDB表空间、InnoDB日志文件 及InnoDB数据表的.frm文件;
重新配置InnoDB表空间;
配置完成后,用备份文件重载数据,生成新的InnoDB数据表。

4.7. 优化服务器

MySQL服务器为我们提供了丰富的参数,以调整服务器满足不同环境的要求。下面分别讨论一下这些参数:


服务器参数变量的设置。MySQL服务器参数可在服务器启动时设置,在MySQL4.0.3及以后的版本中,有些参数也允许在线设置。在MySQL4.0.2及以后的版本里,可以把一个变量名视为一个选项名来设置。如数据表缓冲区的尺寸由服务器参数talbe_cache来设置。如果需把它设置为128,则可以在命令行里增加

--table_cache=128

也可在选项文件中设置:

[mysqld] table_cache=128

在命令行选项中'_'可写'-',变成:

--table-cache=128 #这种写法更像一个标准选项

还有一种是使用--set-variable或-O选项,如:

--set-variable=table_cache=128 or -O table_cache=128 在选项文件中可写成: [mysqld] set-variable=table_cache=128

服务器参数分为全局级和会话级两个级别。全局级参数将影响整个服务器,会话级参数则只影响某给定客户连接上的工作。如果某个变量同时存在于两个级别,则服务器在客户建立连接时用全局变量的值去初始化相应的会话级参数,一旦客户连接建立起来后,对全局参数所作的修改不会影响到相应的会话级参数当前值。设置全局参数和会话级参数的语句:

全局级: mysql> SET GLOBAL variable = value; mysql> SET @@GLOBAL.variable = value; 会话级: mysql> SET SESSION variable = value; mysql> SET @@SESSION.variable = value; 默认不带级别限定符的SET语句修改的参数属会话级,如: mysql> SET variable = value; mysql> SET @@variable = value; 可用一条SET语句设置多个参数,参数间用逗号分隔,如: SET SESSION variable = value1,value2,value3;

SESSION和LOCAL是同义语,可用LOCAL代替SESSION,如:@@LOCAL

具备SUPER权限才能设置全局参数,新设置值的效力将持续到该参数被再次修改或服务器退出。设置会话级参数不用特殊的权限,新设置值的效力将持续到该值被再次修改或连接断开。显示参数的语句如下:

SHOW GLOBAL VARIABLES; SHOW GLOBAL VARIABLES LIKE 'TEST'; SHOW SESSION VARIABLES; SHOW SESSION VARIABLES LIKE 'TEST'; 如不带限定符,则返回会话级参数,如会话级参数不存在则返回全局级参数。 也可用命令行方式显示服务器参数变量,如: % mysqladmin variables
下面介绍一些MySQL服务器通用的参数变量:


back_log,当多个客户同时连接服务器时,客户处理过程需进入一个队列排队等待服务器处理。该值定义服务器等待处理队列长度的最大值,如果站点访问量大,需加大该值。
delayed_queue_size,在实际插入数据表前,来自insert delayed语句的数据行会进入一个队列等待服务器处理。该值定义该队列能容纳的数据行的最大个数。当队列满时,会阻塞后续的语句。加大该值能提高insert delayed语句的执行速度。
flush_time,自动存盘间隔。如果系统经常死机或重启,把这个变量设置为一个适当的非零值,使MySQL服务器每隔flush_time称去刷新一次数据表缓冲区,将其中的信息写入磁盘。这将导致系统性能下降,但可减少数据表被破坏或丢失数据的概率。在命令行上用--flush选项启动服务器可使数据表在每次修改后被自动存盘。
key_buffer_size,用来容纳索引块的缓冲区的长度。加大该值可加快索引创建和修改操作的速度,该索引缓冲区越大,在内存中找到键值的可能性就越大,读盘次数就越少。MySQL3.23前的版本里,该参数叫key_buffer。3.23版本之后,两种叫法都可以。
max_allowed_packet,服务器与客户程序之间通信时使用的缓冲区在最大值。MySQL 4版本之前,该最大值可取16MB,MySQL 4版本以后,该值的最大值是1GB。如果客户端与服务器需传送大容量的数据,如BLOB或TEXT值,就要加大该值。客户端也有一个同名的变量,默认是16MB,该值也要加大。客户端的启动命令为:

% mysql --set-variable=max_allowed_packet=64M
max_connections,允许同时打开的连接数,如果站点繁忙,需加大该值。
table_cache,数据表缓存区的尺寸。加大该值可使服务器能够同时打开更多的数据表,从而减少文件打开/关闭操作的次数。

注意:加大max_connections和table_cache参数的值,会使服务器占用更多的文件描述符。运行多个服务器可绕过该限制。对一些分配给每个客户的资源变量,设置时不能过大,因为当连接数快速增长时会很快耗尽服务器的资源,造成服务器性能下降。
InnoDB处理程序变量:


innodb_buffer_pool_size,InnoDB数据库缓冲池的大小,如果有足够的内存,可把该值设置得大些以减少读盘操作。
innodb_log_file_size和innodb_log_files_in_group,前者设置日志文件的长度,后者设置日志文件的个数。InnoDB日志文件的总长度是两者的乘积,它的总长度不得超过4GB。

4.8. 运行多个MySQL服务器

需运行多个服务器的原因有很多,比如上面提到的可绕过最大文件描述符的限制,还有是进行版本测试和提供专用服务等。运行多个服务器比运行单个服务器复杂很多,需注意以下问题:


在安装不同版本的程序时,需分开目录存放程序和数据目录。如果同一版本的服务器软件,则程序目录可一样,但数据目录则要不同。可用--basedir=dir_name和--datadir=dir_name两个启动选项指时这两个目录。
要为不同的服务器指定不时的--port=port_name(TCP/IP监听端口),--socket=file_name(套接字文件名)和--pid-file=file_name(进程ID文件)值。
如果激活了日志功能,就要为不同的服务器指定不同的日志文件名。
在Windows平台上,被安装为服务的多个MySQL服务器必须有不同的服务名。

多服务器环境下选项文件的配置方法:


使用--defaults-file选项指定每个选项文件,这样,每个服务器就不会去读/etc/my.cnf这些配置文件,而会使用你所指定的配置文件。
可把一些公共的选项放到/etc/my.cnf文件里,再用--defaults-extra-file选项指出特定服务器的特定选项文件。这样就不用在所有的配置文件时重复公共的选项。
用mysql_multi脚本启动服务器,它允许我们把所有的选项放到同一个选项文件里。每一个服务器对应该文件中的一个选项组。

下面介绍用mysql_multi脚本启动多服务器的方法。


为每个服务器编一个编号xxx,对应选项文件的[mysqldxxx]选项组。mysql_multi本身要用到的选项可放到[mysqld_multi]里。这样/etc/my.cnf选项配置文件看起来就象下面这样:

[mysqld001] basedir=/usr/local/mysql/001 datadir=/usr/local/mysql/001/data mysqld=/usr/local/mysql/001/bin/mysqld_safe socket=/usr/local/mysql/001/mysql.sock port=3306 local-infile=1 user=mysqladm log=log log-update=update-log innodb_data_file_path=ibdata1:10M [mysqld002] basedir=/usr/local/mysql/002 datadir=/usr/local/mysql/002/data mysqld=/usr/local/mysql/002/bin/mysqld_safe socket=/usr/local/mysql/002/mysql.sock port=3307 local-infile=1 user=mysqladm log=log log-update=update-log innodb_data_file_path=ibdata1:10M ...
配置好选项文件后,就可用以下命令启动服务器:

% mysqld_multi --no-log start 001,002 #启动001和002两个服务器,并把启动信息发送到控制台,也可用区间的形式给出服务器编号

用以下命令可查看服务器状态:

% mysqld_multi --no-log --user=root --password=password report 001

可用以下命令停止MySQL服务器:

% mysqld_multi --no-log --user=root --password=password stop 001
在windows平台下运行多个MySQL服务器的方式有两种,一种是运行同一个MySQL程序的两个实例,一种是运行多个windows服务,下面分别介绍:


第一种情况需设置两个选项文件,指定不同的数据目录,如:

c:\mysql\my.cnf1 [mysqld] basedir=c:/mysql datedir=c:/mysql/data1 port=3306 c:\mysql\my.cnf2 [mysqld] basedir=c:/mysql datadir=c:/mysql/data2 port=3307

在启动服务器时,用--defaults-file选项指出选项文件即可。如:

c:\> mysqld --defaults-file=c:\mysql\my.cnf1 c:\> mysqld --defaults-file=c:\mysql\my.cnf2
在MySQL 4.0.2版本开始,可以把MySQL安装为一个服务,并可指定一个服务名,如:

c:\> mysql-nt --install service_name 在MySQL 4.0.3开始,安装服务还支持--defaults-file=file_name选项

这样,我们就可把MySQL安装为一系列不同的服务,如果不指定service_name,则安装的服务名默认为MySql,如果指定service_name,则安装的服务名为指定的service_name,并对应选项文件中的[service_name]选项组。以默认服务名运行的服务器还支持一个名为MySql的命名管道,而明确给出服务名的服务器将只监听TCP/IP连接而不支持命名管道--除非还用socket选项明确指定一个套接字文件。

移除服务需先用mysqladmin shutdown命令停掉服务器,再执行以下命令:

c:\> mysql-nt --remove #移除默认的服务 c:\> mysql-nt --remove service_name #移除指定服务

4.9. MySQL服务器镜像配置

通过镜像机制可把数据从一个地方复制到另一个地方,并能实现同步两个或多个地方的数据。MySQL服务器也支持镜像,大提高数据的安全性和稳定性。下面介绍一下MySQL数据中的镜像机制:


在镜像关系中,一个MySQL服务器扮演主服务器角色,另外一个或多个服务器扮演从服务器角色,从服务器中的数据和主服务器中的数据完全一样。
在镜像建立之前,主服务器和从服务器必须进行一次完全同步。同步之后,在主服务器上所做的操作将会在从服务器上再实现,主服务器上的操作不是直接作用于从服务器上的。
负责在主、从服务器上传输各种修改动作的媒介是主服务器上的二进制变更日志,该日志记录着主服务器上所有的操作动作。因此,主服务器必须激活二进制日志功能。
从服务器必须有足够的权限从主服务器上接收二进制日志文件。镜像协调信息记录从服务器的进展情况,包括,从服务器正在读取的二进制变更日志文件名和它在该文件里的当前读写位置。
每个主服务器可以有多个从服务器,但每个从服务器只能有一个主服务器。但MySQL服务器允许把一个从服务器作为另一个从服务器的主服务器,这样就可创建一个镜像服务器链。

镜像机制在MySQL中还是一个新生事物,最早实现于3.23.15版。各版本间的镜像能力有差异,一般来说,建议大家尽量使用最新的版本,下面列举了不同版本的MySQL服务器在镜像机制方面的兼容规则:


3.23.x系统版本的从服务器不能与4.x系统版本的主服务器通信。
4.0.0版本的从服务器只能与4.0.0版本的主服务器通信。
4.0.1或更高版本的从服务器既能与3.23.x系统版本的主服务器通信,也能与4.x系统版本的主服务器通信。但后一种情况要求主服务器的版本号等于或大于从服务器的版本号。

一般来说,建议遵循以下原则:


要尽可能地让主服务器和从服务器都使用同一版本系统。
在选定系统后,尽量使用该系统的最新版本。

建立主从镜像服务器的步骤:


确定主从服务器的镜像ID号,主从服务器的ID号不能相同。在启动主从服务器时,用--server_id启动选项给出其ID。
从服务器必须在主服务器上有一个具备足够的权限的帐户,从服务器将使用该帐户去连接主服务器并请求主服务器把二进制变更日志发送给它。可用以下命令创建这个帐户:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'slave_host' IDENTIFIED BY 'slave_pass'; #REPLICATION权限只MySQL4.0.2后版本,之前的版本请用FILE权限。
把主服务器上的数据库文件拷贝到从服务器上完成最初同步工作。也可用备份后再加载的方法。在MySQL 4.0.0及以后版本里,还可用在主服务器上运行LOAD DATA FROM MASTER语句来建立从服务器。但有约束条件:


数据表要全部是MyISAM表
为发出这条指令而在连接从服务器时使用的帐户必须有SUPER权限。
从服务器用来连接主服务器的帐户必须具备RELOAD和SUPER权限。注意,这是一个主服务器上的帐户,而用来发出LOAD DATA FROM MASTER语句的帐户是一个从服务器上的帐户。
LOAD DATA FROM MASTER语句在执行时需申请一个全局性的读操作锁,这个锁在语句执行期间阻塞主服务器上一切的写操作。

无论用哪种方法同步数据,都要确保在开始制作备份到给主服务器重新配置好二进制日志功能这段时间,不能在主服务器上发生修改操作。
关闭服务器。
对主服务器的配置进行修改--把它的镜像ID告诉它并激活其二进制日志功能。在主服务器要读取的选项文件内增加以下内容:

[mysqld] server-id=master_server_id log-bin=binlog_name
重新启动主服务器,从现在开始,它将把客户对数据库的修改操作记录到二进制变更日志里。如果在此之前已经激活了二进制日志功能,则要在重启前把二进制变更日志备份下来,在重启后再发一条RESET MASTER语句去清除现有的二进制变更日志。
关闭从服务器。
对从服务器进行配置,使它知道自已的镜像ID,到哪里去找主服务器以及如何去连接主服务器。配置内容如下:

[mysqld] server-id=slave_server_id master-host=master_host master-user=slave_user #在主服务器上为从服务器建立的帐户 msater-password=slave_pass #在主服务器上为从服务器建立的帐户的密码 master-connet-retry=30 #设置连接重试间隔,默认为60秒 master-retry-count=100000 #设置重试次数,默认为86400次 注:最后两个选项在网络连接不可靠时设置
重新启动从服务器。从服务器用两个信息源来确定它自已在镜像工作中的进度位置:一个是数据目录中的master.info文件,另一个是启动选项所给定的配置信息。第一次启动从服务器时,master.info文件不存在,从服务器会根据选项文件中给出的各种master-xxx选项值去连接主服务器。一旦连接成功,从服务器会创建一个master.info文件以保存各种连接参数和它自已的镜像工作状态。如果以后再重启从服务器,从服务器会优先读取该文件,而不是选项文件。所以如果你修改了选项文件的内容,想该选项生效就要删除master.info文件并重启从服务器。

以上步骤是镜像所有数据库的操作过程,如果我们想把mysql权限数据保留在主服务器上,排除在镜像机制外的话,可用在选项文件的[mysqld]中加入--binlog-ignore-db=mysql选项,这样,mysql数据库上的操作就不会记录在二进制变更日志里。如要排除其它数据库,只要增加多几个该选项即可。

通过以下几个命令可监控和管理主从服务器:


SLAVE STOP,SLAVE START用于挂起来恢复从服务器上镜像,如当备份时,可用该语句让从服务器暂时停止镜像活动。
SHOW SLAVE STATUS,在从服务器上查看其镜像协调信息,这些信息可以用来判断哪些二进制变更日志已经不再使用。
PURGE MASTER,在主服务器上对二进制变更日志进行失效处理。删除所有从服务器都不再使用的二进制变更日志。
CHANGE MASTER,在从服务器上修改镜像参数。如正在读取主服务器上哪个二进制变更日志,正在写哪个中继日志文件等。

在MySQL4.0.2之后版本中,镜像机制中的从服务器由两个内部线程组成:


一个叫“I/O线程”,负责与主服务器通信,请求主服务器发送二进制变更日志,并把接收到的数据修改命令写入某个中继日志文件;用SLAVE STOP IO_THREAD或SLAVE START IO_THREAD可挂起或恢复该线程。
另一个叫“SQL线程”,负责从中继日志中读取数据修改命令并执行。同理,用SLAVE STOP SQL_THREAD或SLAVE START SQL_THREAD可挂起或恢复该线程。

中继日志文件默认的文件为hostname-relay-bin.nnn和hostname-relay-bin.index。可用从服务器的--relay-log和--relay-log-index选项修改。在从服务器中还有一个relay-log.info中继信息文件,可用--relay-log-info-file启动选项修改文件名。

转载于:https://my.oschina.net/jackjie/blog/129925

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值