当前位置:首页 >> IT/计算机 >>

用MySQL解决一些常见问题


用 MySQL 解决一些常见问题
1 数据库复制 一方面复制可以用来增加健壮性和速度。对健壮性,你有 2 个系统,而如果 你出了问题,切换到备份即可。额外的速度通过把非更新查询的一部分送到复制 服务器来达到。当然,这只在非更新查询为主时有用,但是这正是一般的情形。 一方面复制计划在不久的未来实现。这将被实现,使得从服务器将以较低优 先级的更新和延迟插入被同步到最新数据(这将给读者以比写者更高的优先级)。 MySQL(至今)没有数据库复制,但是有一些如何实现的信息。 MySQL 复制一个数据库最一般的方法是使用更新日志。见 9.2 更新日志。这要求 充当一个主数据库(进行数据改变的)并且另一个或多个充当从数据库。 要更新一 个从数据库,只要运行 mysql < update_log。提供对于从数据库适当的主机、 用户和口令选项,并且将主数据库的更新日志作为输入。 如果你从未从一张表中删除任何东西, 你可以使用一个 TIMESTAMP 列找出自 上一次复制以来(通过比较作你上次做复制的时间) 表中哪个行被插入和被改变, 且仅拷贝这些行到镜像中。 有可能使用更新日志(对删除)和时间戳记(在两端)做成一个双向更新系统 统,但是在这种情况下,当同一数据在两端被改变时,你必须能处理冲突。你可 能想保持旧版本以帮助决定什么被更新了。 因为在这种情况中复制用 SQL 语句进行, 你不应该在更新数据库的语句中使 用下列函数;他们不能返回与原数据库相同的值:
? ? ? ?

DATABASE() GET_LOCK()和 RELEASE_LOCK() RAND() USER(), SYSTEM_USER()或 SESSION_USER()

?

VERSION()

所有的时间函数可安全地使用,比如如果需要,时间戳记被送到镜像。 LAST_INSERT_ID()也可安全地使用。 2 数据库备份 因为 MySQL 表作为文件存储, 做一个备份是容易的。 为了得到一个一致的备 份,在相关的表上做一个 LOCK TABLES。见 7.24 LOCK TABLES/UNLOCK TABLES 句法。你只需一个读锁定;当你在数据库目录中做文件的一个拷贝时,这允许其 他线程继续查询该表。如果你想要做一个 SQL 级的备份,你可以 SELECT INTO OUTFILE。 备份一个数据库的另一个方法是使用 mysqldump 程序: 1. 2. 为你的数据库做一个完整的备份: shell> mysqldump --tab=/path/to/some/dir --opt --full

你也可以简单地拷贝所有的表文件(“*.frm”、 “*.MYD”和“*.MYI” 文件),只要服务器不在更新任何东西。 3. 停止 mysqld 如果它正在运行, 然后以--log-update 选项启动它。

你将得到一个名为“hostname.n”形式的日志文件, 这里 n 是随着你每 次执行 mysqladmin refresh 或 mysqladmin flush-logs、FLUSH LOGS 语 句、或重启服务器而递增的一个数字。这些日志文件向你提供了在你执行 mysqldump 处后面进行的复制数据库改变的所需信息。 如果你必须恢复一些东西,尝试首先用 myisamchk -r 恢复你的表。这应该 处理所有情况的 99.9%。如果 myisamchk 失败,尝试下列过程: 1. 2. 3. 恢复原来的 mysqldump 备份。 执行下列命令以再次运行更新日志中的更改: shell> ls -1 -t -r hostname.[0-9]* | xargs cat | mysql

ls 被用来以正确的顺序得到所有的日志文件。 你也可以与 SELECT * INTO OUTFILE 'file_name' FROM tbl_name 做有选择 的备份并且用 LOAD DATA INFILE 'file_name' REPLACE ...恢复。为了避免重 复记录,在表中你需要一个 PRIMARY KEY 或 UNIQUE 键。当在唯一键值上一个新 记录与一个老记录重复时,REPLACE 关键词使得老记录用一个新记录替代。 3 在同一台机器上运行多个 MySQL 服务器 有些情况下你可能想要在同一台机器上运行多个服务器。例如,你可能想要 测试一个新的 MySQL 版本而让你现有生产系统的设置不受到干扰, 或你可能是想 要为不同的客户提供独立的 MySQL 安装一个因特网服务供应商。 如果你想要运行多个服务器,最容易的方法是用不同的 TCP/IP 端口和套接 字文件重新编译服务器,因此他们不是侦听同一个 TCP/IP 端口或套接字。 假设一个现存服务器配置为缺省端口号和套接字文件,那么用一个这样的 configure 命令行设置新的服务器: shell> ./configure --with-tcp-port=port_number \

--with-unix-socket=file_name \ --prefix=/usr/local/mysql-3.22.9 这里 port_number 和 file_name 应该不同于缺省端口号和套接字文件路径名, 而且--prefix 值应该指定一个不同于现存的 MySQL 安装所在的安装目录。 你可以用这个命令检查由任何当前执行的 MySQL 所使用的套接字和端口: shell> mysqladmin -h hostname --port=port_number variables 如果你有一个 MySQL 服务器正运行在你使用了的端口上,你将得到 MySQL 的一些最重要的可配置变量的一张表,包括套接字名等。

你也应该编辑你机器的初始化脚本(可能是“mysql.server”)来启动并杀 死多个 mysqld 服务器。 你不必重新编译一个新 MySQL 服务器, 只要以一个不同的端口和套接字启动 即可。你可以通过指定在运行时 safe_mysqld 使用的选项来改变端口和套接字: shell> /path/to/safe_mysqld --socket=file_name --port=port_number 如果你在与开启日志的另一个服务器相同的一个数据库目录下运行新服务 器, 你也应该用 safe_mysqld 的--log 和--log-update 选项来指定日志文件的名 字,否则,两个服务器可能正在试图写入同一个日志文件。 警告:通常你决不应该有在同一个数据库中更新数据的 2 个服务器!如果你 警告 的 OS 不支持无故障(fault-free)的系统锁定, 这可能导致令人惊讶的事情发生! 如果你想要为第二个服务器使用另一个数据库目录,你可以使用 safe_mysqld 的--datadir=path 选项。 当你想要连接一个正在运行的使用一个不同于编译进你的客户程序中端口 的 MySQL 服务器时,你可以使用下列方法之一:
?

以--host 'hostname' --port=port_numer 或[--host localhost]

--socket=file_name 启动客户。
?

在你的 C 或 Perl 程序中,当连接 MySQL 服务器时,你可以给出

端口和套接字参数。
?

在你启动客户程序之前,设置 MYSQL_UNIX_PORT 和

MYSQL_TCP_PORT 环境变量,指向 Unix 套接字和 TCP/IP 的端口。如果你 通常使用一个特定的套接字或端口, 你应该将设置这些环境变量的命令放 进你的“.login”文件中。见 12.1 不同的 MySQL 程序概述。
?

在你的主目录下的“.my.cnf”文件中指定缺省套接字和

TCP/IP 端口。


相关文章:
Mysql字符集设置原理以及常见问题解决
Mysql字符集设置原理以及常见问题解决_计算机软件及应用_IT/计算机_专业资料。...若上述值不存在,则使用 character_set_server 设定值。 3. 将操作结果从内部...
Mysql连接超时的问题解决
Mysql连接超时的问题解决 - Mysql 连接超时的问题解决 mysql5 数据库连接超时问题的解决办法最近碰到一个 mysql5 数据库的问题。就是一个标准 的 servlet/tomc...
Centos 5安装mysql 5及常见问题解决
Centos 5 安装 mysql 5.6 及常见问题解决安装文件放在/soft/V44512-01/ 首先 rpm -qa mysql 发现已经安装 mysql5.0 [root@localhost ~]# rpm -qa|grep -i...
开发常见问题及解决办法
开发常见问题解决办法 - Tomcat 启动时报错: Q: java.lang.ClassNotFoundException: org.springframework.web.context...
MySQL生产环境突发故障处理手册
MySQL生产环境突发故障处理手册_计算机硬件及网络_IT/计算机_专业资料。MySQL 生产...7&gt;步骤(备注:有些场景,也可以考虑借助脚 本循环的方式解决) 4.MySQL 假死 ...
怎样解决mysql 集群问题集
怎样解决 mysql 集群问题MySQL 是一个开放源码的小型关联式数据库管理系统,目前 MySQL 被广 泛地应用在 Internet 上的中小型网站中。由于其体积小、速度快、...
完美解决mysql安装问题
完美解决mysql安装问题 - 完美解决mysql安装问题:安装到configuration overview界面卡住了;无法启动mysql服务;
mysql 安装失败问题汇总
mysql 安装失败问题汇总 - 这是最近安装Mysql 时的一些问题汇总,希望对大家有帮助。... MySQL 5.1 安装过程中报 apply security setting 错误的解决办法 1, 卸载 ...
Mysql 自动断开连接的问题及解决办法
Mysql 自动断开连接的问题解决办法_计算机软件及应用_IT/计算机_专业资料。Mysql 自动断开连接的问题解决办法 曾经在公司的时候,同事做项目(tomcat + struts+ ...
解决MySQL root用户初始密码问题
解决MySQL root用户初始密码问题 - 安装Mysql,到最后一步Apply security settings,又遇到1045问题了。 错误代码 1045 Access denied f...
更多相关标签: