• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • CHANGE MASTER TO语句

    本节讨论用于管理从属复制服务器的语句。“用于控制主服务器的SQL语句”讨论了用于管理主服务器的语句。

    除了此处描述的语句外,SHOW SLAVE STATUS并且SHOW RELAYLOG EVENTS还与复制从站一起使用。有关这些语句的信息,请参见“ SHOW SLAVE STATUS语句”和“ SHOW RELAYLOG EVENTS语句”。

    更改主报表

    CHANGE MASTER TO option [, option] ... [ channel_option ]
    
    option:
        MASTER_BIND = 'interface_name'
      | MASTER_HOST = 'host_name'
      | MASTER_USER = 'user_name'
      | MASTER_PASSWORD = 'password'
      | MASTER_PORT = port_num
      | PRIVILEGE_CHECKS_USER = {'account' | NULL}
      | REQUIRE_ROW_FORMAT = {0|1}
      | MASTER_CONNECT_RETRY = interval
      | MASTER_RETRY_COUNT = count
      | MASTER_DELAY = interval
      | MASTER_HEARTBEAT_PERIOD = interval
      | MASTER_LOG_FILE = 'master_log_name'
      | MASTER_LOG_POS = master_log_pos
      | MASTER_AUTO_POSITION = {0|1}
      | RELAY_LOG_FILE = 'relay_log_name'
      | RELAY_LOG_POS = relay_log_pos
      | MASTER_COMPRESSION_ALGORITHMS = 'value'
      | MASTER_ZSTD_COMPRESSION_LEVEL = level
      | MASTER_SSL = {0|1}
      | MASTER_SSL_CA = 'ca_file_name'
      | MASTER_SSL_CAPATH = 'ca_directory_name'
      | MASTER_SSL_CERT = 'cert_file_name'
      | MASTER_SSL_CRL = 'crl_file_name'
      | MASTER_SSL_CRLPATH = 'crl_directory_name'
      | MASTER_SSL_KEY = 'key_file_name'
      | MASTER_SSL_CIPHER = 'cipher_list'
      | MASTER_SSL_VERIFY_SERVER_CERT = {0|1}
      | MASTER_TLS_VERSION = 'protocol_list'
      | MASTER_TLS_CIPHERSUITES = 'ciphersuite_list'
      | MASTER_PUBLIC_KEY_PATH = 'key_file_name'
      | GET_MASTER_PUBLIC_KEY = {0|1}
      | IGNORE_SERVER_IDS = (server_id_list)
    
    channel_option:
        FOR CHANNEL channel
    
    server_id_list:
        [server_id [, server_id] ... ]
    

    CHANGE MASTER TO更改从属服务器用于连接到主服务器,读取主二进制日志和读取从属中继日志的参数。它还会更新主信息和中继日志信息存储库的内容(请参见“复制中继和状态日志”)。CHANGE MASTER TO需要REPLICATION_SLAVE_ADMINSUPER特权。

    您可以CHANGE MASTER TO在运行的从属服务器上发出语句,而无需先停止它,这取决于从属SQL线程和从属I / O线程的状态。本节稍后将提供管理此类使用的规则。

    当使用多线程从属服务器(换句话说slave_parallel_workers,大于0)时,停止从属服务器可能会导致已从中继日志执行的事务序列中出现“间隙”,而与从属服务器是否有意停止无关。如果存在这种差距,发行CHANGE MASTER TO就会失败。在这种情况下的解决方案是START SLAVE UNTIL SQL_AFTER_MTS_GAPS确保间隙被缩小。

    可选的子句使您可以命名该语句应用于哪个复制通道。提供子句可将语句应用于特定的复制通道,并用于添加新通道或修改现有通道。例如,添加一个名为channel2的新通道:FOR CHANNEL channelFOR CHANNEL channelCHANGE MASTER TO

    CHANGE MASTER TO MASTER_HOST=host1, MASTER_PORT=3002 FOR CHANNEL 'channel2'
    

    如果未命名任何子句且不存在其他通道,则该语句将应用于默认通道。

    使用多个复制通道时,如果CHANGE MASTER TO语句未使用子句命名通道,则会发生错误。有关更多信息,请参见“复制通道”。FOR CHANNEL channel

    未指定的选项保留其值,除非以下讨论中指出。因此,在大多数情况下,无需指定不变的选项。

    MASTER_HOSTMASTER_USERMASTER_PASSWORD,和MASTER_PORT到有关如何连接到其主从提供信息:

    • MASTER_HOSTMASTER_PORT是主控主机的主机名(或IP地址)及其TCP / IP端口。

      注意

      复制不能使用Unix套接字文件。您必须能够使用TCP / IP连接到MySQL主服务器。

      如果指定MASTER_HOSTMASTER_PORT选项,则从服务器将假定主服务器与之前的服务器不同(即使选项值与其当前值相同)。在这种情况下,主二进制日志文件名和位置的旧值是考虑不再适用,因此,如果不指定MASTER_LOG_FILE,并MASTER_LOG_POS在声明中,MASTER_LOG_FILE=''MASTER_LOG_POS=4以静默追加到它。

      设置MASTER_HOST=''(即,明确其值设置为空字符串)是一样的没有设置MASTER_HOST在所有。尝试设置MASTER_HOST为空字符串失败,并显示错误。

      检查用于MASTER_HOST和其他CHANGE MASTER TO选项的值是否包含换行符(\n0x0A);这些值中存在此类字符会导致语句以失败ER_MASTER_INFO。(缺陷#11758581,缺陷#50801)

    • MASTER_USER并且MASTER_PASSWORD是用户名和账号,以用于连接到主的密码。

      MASTER_USER不能为空;设置MASTER_USER =''或设置MASTER_PASSWORD为时将其保留为未设置会导致错误(错误#13427949)。

      CHANGE MASTER TO语句中用于MySQL复制从属帐户的密码长度限制为32个字符;尝试使用超过32个字符的密码会导致CHANGE MASTER TO失败。

      在并发语句的输出中可以看到正在运行的CHANGE MASTER TO语句的文本,包括MASTER_USER和的值。(语句的全文也可见。)MASTER_PASSWORDSHOW PROCESSLISTSTART SLAVESHOW PROCESSLIST

    REQUIRE_ROW_FORMAT(自MySQL 8.0.19起可用)允许复制通道仅处理基于行的复制事件。此选项可防止复制请求者执行诸如创建临时表和执行LOAD DATA INFILE请求之类的操作,从而增加了通道的安全性。组复制通道是使用REQUIRE_ROW_FORMATset 自动创建的,您不能更改这些通道的选项。有关更多信息,请参见“复制特权检查”。

    PRIVILEGE_CHECKS_USER(自MySQL 8.0.18起可用)命名为指定通道提供安全上下文的用户帐户。NULL,这是默认值,表示不使用安全上下文。PRIVILEGE_CHECKS_USER设置时,强烈建议使用基于行的二进制日志记录,您可以将其设置REQUIRE_ROW_FORMAT为强制执行此操作。例如,要channel_1在正在运行的复制从属服务器上的通道上启动特权检查,请发出以下语句:

    mysql> STOP SLAVE FOR CHANNEL 'channel_1';
    mysql> CHANGE MASTER TO 
             PRIVILEGE_CHECKS_USER = 'priv_repl'@'%.example.com',
             REQUIRE_ROW_FORMAT = 1,
             FOR CHANNEL 'channel_1'; 
    mysql> START SLAVE FOR CHANNEL 'channel_1';
    

    用户帐户的用户名和主机名必须遵循“指定帐户名”中所述的语法,并且该用户不得为匿名用户(用户名为空)或CURRENT_USER。该帐户必须具有REPLICATION_APPLIER特权,以及执行通道复制的交易所需的特权。有关帐户所需特权的详细信息,请参见“复制特权检查”。重新启动复制通道时,从那时起将应用特权检查。如果您未指定通道并且不存在其他通道,则该语句将应用于默认通道。

    MASTER_COMPRESSION_ALGORITHMSMASTER_ZSTD_COMPRESSION_LEVEL(自MySQL 8.0.18起可用)启用对对主服务器连接使用压缩的控制:

    • MASTER_COMPRESSION_ALGORITHMS指定允许的压缩算法。可用算法与protocol_compression_algorithms系统变量相同。默认值为uncompressed

      MASTER_COMPRESSION_ALGORITHMS仅当slave_compressed_protocol禁用系统变量时,才应用值。如果slave_compressed_protocol启用,则优先级高,MASTER_COMPRESSION_ALGORITHMS并且zlib如果主服务器和从属服务器均支持该算法,则与主服务器的连接将使用压缩。

    • MASTER_ZSTD_COMPRESSION_LEVEL是用于使用zstd压缩算法的连接的压缩级别。允许的级别为1到22,更大的值表示压缩级别增加。默认zstd压缩级别为3。压缩级别设置对不使用zstd压缩的连接无效。

    该选项与选项指定从使用加密密钥和密码如何保护复制连接。即使在没有SSL支持的情况下编译的从站上,也可以更改这些选项。它们将保存到主信息存储库,但是如果从属服务器未启用SSL支持,则将其忽略。的和作为选项执行相同的功能和在所描述的客户机选项命令选项用于加密连接。两套方案之间的对应关系,以及使用的和MASTER_SSL_xxxMASTER_TLS_xxxMASTER_SSL_xxxMASTER_TLS_xxx--ssl-xxx--tls-xxxMASTER_SSL_xxxMASTER_TLS_xxx“设置复制以使用加密的连接”中介绍了设置安全连接的选项。

    重要

    要使用通过caching_sha2_password插件进行身份验证的用户帐户连接到复制主服务器,必须按照“设置复制以使用加密的连接”中所述设置安全连接,或启用未加密的连接以支持密码使用RSA密钥对进行交换。caching_sha2_password对于从MySQL 8.0创建的新用户,身份验证插件是默认的(有关详细信息,请参见“缓存SHA-2可插入身份验证”)。如果您创建或用于复制的用户帐户(由MASTER_USER选项)使用此身份验证插件,并且您没有使用安全连接,则必须启用基于RSA密钥对的密码交换才能成功进行连接。

    要启用基于RSA密钥对的密码交换,请指定MASTER_PUBLIC_KEY_PATHGET_MASTER_PUBLIC_KEY=1选项。这些选项中的任何一个都为从服务器提供RSA公钥:

    • MASTER_PUBLIC_KEY_PATH表示文件的路径名,该文件包含主服务器用于基于RSA密钥对的密码交换所需的主密钥的从属端副本。该文件必须为PEM格式。此选项适用于使用sha256_passwordcaching_sha2_password身份验证插件进行身份验证的从站。(对于sha256_passwordMASTER_PUBLIC_KEY_PATH仅当MySQL使用OpenSSL构建时才可以使用。)
    • GET_MASTER_PUBLIC_KEY指示是否从主服务器请求基于RSA密钥对的密码交换所需的公共密钥。此选项适用于使用caching_sha2_password身份验证插件进行身份验证的从站。对于通过使用此插件进行身份验证的帐户进行的连接,除非请求,主服务器不会发送公钥,因此必须在客户端中进行请求或指定。如果MASTER_PUBLIC_KEY_PATH给出并指定了有效的公共密钥文件,则优先于GET_MASTER_PUBLIC_KEY

    MASTER_HEARTBEAT_PERIODMASTER_CONNECT_RETRYMASTER_RETRY_COUNT选项控制从如何认识到主机的连接已经丢失,使尝试重新连接。

    • 所述slave_net_timeout系统变量指定的秒尝试重新连接的数量,该从属等待任一多个数据或来自主设备的心跳信号,从属认为破连接之前,中止该读出和。默认值为60秒(一分钟)。
    • 心跳间隔由该MASTER_HEARTBEAT_PERIOD选项控制,该间隔将在没有数据的情况下停止连接超时(如果连接仍然良好)。在该秒数之后,心跳信号将发送到从属设备,并且每当用事件更新主设备的二进制日志时,都会重置等待时间。因此,仅当二进制日志文件中没有未发送事件的时间超过此时间时,主机才会发送心跳。心跳间隔interval是一个十进制值,范围是0到4294967秒,分辨率是毫秒。最小的非零值为0.001。设置interval设置为0将完全禁用心跳。心跳间隔默认为slave_net_timeout系统变量值的一半。它记录在主信息日志中,并显示在“replication_connection_configuration性能模式”表中。发出RESET SLAVE将心跳间隔重置为默认值。

      请注意slave_net_timeout,无论是已明确设置还是正在使用先前计算的默认值,更改值或默认设置都不会自动更改心跳间隔。如果您设置@@GLOBAL.slave_net_timeout的值小于当前心跳间隔的值,则会发出警告。如果slave_net_timeout更改,还必须发出CHANGE MASTER TO将心跳间隔调整为适当的值,以使心跳信号在连接超时之前出现。如果不这样做,则心跳信号将无效,并且如果未从主设备接收到任何数据,则从属设备可以进行重复的重新连接尝试,从而创建僵尸转储线程。

    • 如果从站确实需要重新连接,则第一次重试将在超时后立即进行。MASTER_CONNECT_RETRY指定重新连接尝试之间的间隔,并MASTER_RETRY_COUNT限制重新连接尝试的次数。如果同时使用了两个默认设置,则从站将在两次重新连接尝试之间等待60秒(MASTER_CONNECT_RETRY=60),并继续尝试以此速率重新连接60天(MASTER_RETRY_COUNT=86400)。这些值记录在主信息日志中,并显示在“replication_connection_configuration性能模式”表中。MASTER_RETRY_COUNT取代--master-retry-count服务器启动选项。

    MASTER_DELAY指定从站必须滞后主机几秒。从主机接收到的事件interval要比在主机上执行的事件至少晚几秒钟后才执行。缺省值为0。如果interval不是0到2 31 -1 范围内的非负整数,则会发生错误。有关更多信息,请参见“延迟复制”。

    当从属SQL线程停止时,可以在正在运行的从属服务器上执行CHANGE MASTER TO采用该MASTER_DELAY选项的语句。

    MASTER_BIND用于在具有多个网络接口的复制从属服务器上使用,并确定选择了哪个从属服务器的网络接口来连接到主服务器。

    使用此选项配置的地址(如果有)可以在Master_Bind的输出列中看到SHOW SLAVE STATUS。在主信息存储库表中mysql.slave_master_info,该值可以视为Master_bind列。

    NDB群集还支持将复制从属服务器绑定到特定网络接口的功能。

    MASTER_LOG_FILE并且MASTER_LOG_POS是下一次线程从属I / O线程应开始从主线程读取的坐标。RELAY_LOG_FILE并且RELAY_LOG_POS是下一次线程从属SQL线程应从中继日志开始读取的坐标。如果指定MASTER_LOG_FILEMASTER_LOG_POS,则不能指定RELAY_LOG_FILERELAY_LOG_POS。如果指定MASTER_LOG_FILEMASTER_LOG_POS,则也不能指定MASTER_AUTO_POSITION = 1(在本节后面介绍)。如果未指定MASTER_LOG_FILEMASTER_LOG_POS,则从服务器将使用从SQL线程之前的最后一个坐标CHANGE MASTER TO发出。这样,即使您只是想更改要使用的密码,即使从SQL线程比从I / O线程晚,复制也不会中断。

    RELAY_LOG_FILE可以使用绝对路径或相对路径,并使用与相同的基本名称MASTER_LOG_FILE。一个CHANGE MASTER TO声明用人RELAY_LOG_FILERELAY_LOG_POS或这两个选项可以在运行时从从SQL线程停止执行。如果从SQL线程和从I / O线程中至少有一个正在运行,则保留中继日志。如果两个线程都停止,则除非指定RELAY_LOG_FILE或中的至少一个,否则将删除所有中继日志文件RELAY_LOG_POS。请注意,“组复制”应用程序通道(group_replication_applier)没有I / O线程,只有SQL线程。对于此通道,当SQL线程停止时,不会保留中继日志。

    MASTER_AUTO_POSITION = 1与一起使用时CHANGE MASTER TO,从服务器尝试使用基于GTID的复制协议连接到主服务器。CHANGE MASTER TO仅当从属SQL和从属I / O线程都停止时,才可以使用此选项。从站和主站都必须启用GTID(GTID_MODE=ONON_PERMISSIVE,OFF_PERMISSIVE在从站和GTID_MODE=ON主站上)。自动定位被用于连接,因此坐标表示通过MASTER_LOG_FILEMASTER_LOG_POS未使用,和使用任一种或两种这些选项连同的MASTER_AUTO_POSITION = 1原因的错误。如果在从属服务器上启用了多源复制,则需要设置MASTER_AUTO_POSITION = 1每个适用的复制通道的选项。

    使用MASTER_AUTO_POSITION = 1set时,在初始连接握手中,从属发送一个GTID集,其中包含它已经接收,提交或同时进行的事务。主服务器通过发送记录在其二进制日志中的所有事务进行响应,该事务的GTID不包括在从服务器发送的GTID集中。这种交换可确保主机仅发送带有从机尚未记录或提交的GTID的事务。如果从设备从多个主机接收事务,例如菱形拓扑,则自动跳过功能可确保不会两次应用事务。有关如何计算从站发送的GTID集的详细信息,请参见“ GTID自动定位”。。

    如果应由主服务器发送的任何事务已从主服务器的二进制日志中清除,或已gtid_purged通过另一种方法添加到系统变量中的GTID集中,则主服务器将错误ER_MASTER_HAS_PURGED_REQUIRED_GTIDS发送给从服务器,并且复制不会开始。在警告消息ER_FOUND_MISSING_GTIDS中,在主机的错误日志中标识并列出丢失的已清除事务的 GTID。同样,如果在交换事务期间发现从属已使用GTID中的主机的UUID记录或提交了事务,但主机本身尚未提交,则主机发送错误 ER_SLAVE_HAS_MORE_GTIDS_THAN_MASTER到从属服务器,并且复制不会开始。有关如何处理这些情况的信息,请参见“ GTID自动定位”。

    通过检查“性能模式”replication_connection_status表或的输出,可以参见复制是否在启用自动定位的情况下运行SHOW SLAVE STATUSMASTER_AUTO_POSITION再次禁用该选项将使从属设备恢复为基于文件的复制,在这种情况下,您还必须指定MASTER_LOG_FILEMASTER_LOG_POS选项之一或两者。

    IGNORE_SERVER_IDS接受以逗号分隔的0或多个服务器ID的列表。除了日志轮换和删除事件(仍记录在中继日志中)外,将忽略源自相应服务器的事件。

    在循环复制中,原始服务器通常充当其自身事件的终止者,因此它们不会被多次应用。因此,当删除循环中的一台服务器时,此选项在循环复制中很有用。假设您有一个包含4个服务器,服务器ID为1、2、3和4的循环复制设置,并且服务器3发生故障。当通过开始从服务器2到服务器4的复制来弥合差距时,可以在服务器4上发出IGNORE_SERVER_IDS =(3)CHANGE MASTER TO语句中包含要告诉它使用服务器2作为其主服务器而不是服务器3的语句。这样做会导致它忽略并且不执行传播源于不再使用的服务器的任何语句。

    如果IGNORE_SERVER_IDS包含服务器自己的ID,并且服务器在--replicate-same-server-id启用该选项的情况下启动,则会导致错误。

    注意

    当使用全局事务标识符(GTID)进行复制时,已应用的事务将被自动忽略,因此该IGNORE_SERVER_IDS功能不是必需的,并且已弃用。如果gtid_mode=ON为服务器设置了,则如果IGNORE_SERVER_IDSCHANGE MASTER TO语句中包含该选项,则会发出弃用警告。

    主信息存储库和的输出SHOW SLAVE STATUS提供当前被忽略的服务器列表。有关更多信息,请参见“从站状态日志”和“ SHOW SLAVE STATUS语句”。

    如果CHANGE MASTER TO发出的声明没有任何IGNORE_SERVER_IDS选择,则将保留所有现有列表。要清除忽略的服务器列表,必须使用带有空列表的选项:

    CHANGE MASTER TO IGNORE_SERVER_IDS = ();
    

    RESET SLAVE ALL清除IGNORE_SERVER_IDS

    注意

    如果SET GTID_MODE=ON任何通道的现有服务器ID设置为,则发出弃用警告,如果发出IGNORE_SERVER_IDS。在开始基于GTID的复制之前,请检查并清除相关服务器上所有忽略的服务器ID列表。该SHOW_SLAVE_STATUS语句显示忽略的ID列表(如果有的话)。如果确实收到不赞成使用的警告,则仍可以gtid_mode=ON通过发出CHANGE MASTER TO包含IGNORE_SERVER_IDS带有空列表的选项的语句来清除设置后的列表。

    调用CHANGE MASTER TO原因以前的数值MASTER_HOSTMASTER_PORTMASTER_LOG_FILE,并且MASTER_LOG_POS被写入到错误日志,有关奴隶的状态之前执行的其他信息。

    CHANGE MASTER TO导致隐式提交正在进行的事务。请参见“START TRANSACTION,COMMIT和ROLLBACK语句”。

    从MySQL 5.7开始,在STOP SLAVE发出任何CHANGE MASTER TO语句(和START SLAVE之后)之前执行的严格要求已被删除。而不是取决于从站是否停止,而是取决于从CHANGE MASTER TO站SQL线程和从站I / O线程的状态。现在,这些线程中的哪个线程已停止或正在运行,确定了CHANGE MASTER TO在给定时间点可以与语句一起使用或不能使用的选项。进行此确定的规则在此处列出:

    • 如果SQL线程停止时,可以执行CHANGE MASTER TO使用被允许的其他方式的任意组合RELAY_LOG_FILERELAY_LOG_POSMASTER_DELAY选择,即使从I / O线程运行。当I / O线程正在运行时,此语句不能与其他选项一起使用。
    • 如果I / O线程停止时,可以执行CHANGE MASTER TO使用任何选项,此语句(任何允许的组合)除外RELAY_LOG_FILERELAY_LOG_POSMASTER_DELAY,或MASTER_AUTO_POSITION = 1SQL线程运行时也是如此。
    • SQL线程和I / O线程都必须在发出使用一条CHANGE MASTER TO语句的同时停止MASTER_AUTO_POSITION = 1

    您可以使用来检查从属SQL和I / O线程的当前状态SHOW SLAVE STATUS。请注意,“组复制”应用程序通道(group_replication_applier)没有I / O线程,只有SQL线程。

    有关更多信息,请参见“故障转移期间切换主服务器”。

    如果使用的是基于语句的复制和临时表,则该CHANGE MASTER TO语句之后的STOP SLAVE语句可能会在从属服务器上留下临时表。ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO现在,无论何时发生警告()。在这种情况下,可以通过Slave_open_temp_tables在执行该CHANGE MASTER TO语句之前确保系统状态变量的值等于0 来避免这种情况。

    CHANGE MASTER TO当您拥有主服务器的快照并记录了与快照时间相对应的主服务器二进制日志坐标时,对于设置从属服务器很有用。将快照加载到从属服务器以使其与主服务器同步后,可以在从属服务器上运行以指定从属服务器应开始读取主服务器二进制日志的坐标。CHANGE MASTER TO MASTER_LOG_FILE='log_name', MASTER_LOG_POS=log_pos

    以下示例更改了从服务器使用的主服务器,并建立了从服务器开始读取的主二进制日志坐标。当您要设置从属服务器以复制主服务器时,将使用此命令:

    CHANGE MASTER TO
      MASTER_HOST='master2.example.com',
      MASTER_USER='replication',
      MASTER_PASSWORD='password',
      MASTER_PORT=3306,
      MASTER_LOG_FILE='master2-bin.001',
      MASTER_LOG_POS=4,
      MASTER_CONNECT_RETRY=10;
    

    下一个示例显示了较少使用的操作。当从站具有由于某些原因要再次执行的中继日志文件时,将使用它。为此,主机不需要是可及的。您只需要使用CHANGE MASTER TO并启动SQL线程(START SLAVE SQL_THREAD):

    CHANGE MASTER TO
      RELAY_LOG_FILE='slave-relay-bin.006',
      RELAY_LOG_POS=4025;
    

    下表显示了字符串值选项的最大允许长度。

    选项最大长度
    MASTER_HOST255(MySQL 8.0.17之前的60)
    MASTER_USER96
    MASTER_PASSWORD32
    MASTER_LOG_FILE511
    RELAY_LOG_FILE511
    MASTER_SSL_CA511
    MASTER_SSL_CAPATH511
    MASTER_SSL_CERT511
    MASTER_SSL_CRL511
    MASTER_SSL_CRLPATH511
    MASTER_SSL_KEY511
    MASTER_SSL_CIPHER511
    MASTER_TLS_VERSION511
    MASTER_TLS_CIPHERSUITES4000
    MASTER_PUBLIC_KEY_PATH511
    MASTER_COMPRESSION_ALGORITHMS99