Aquí hay una breve descripción de cómo inicializar una replicación completa de su servidor MySQL. Asume que quiere replicar todas las bases de datos en el maestro y no tiene una replicación préviamente configurarda. Necesita parar el servidor maestro brevemente para completar los pasos descritos aquí.
Este procedimiento está escrito en términos de inicializar un esclavo único, pero puede usarlo para inicializar múltiples esclavos.
Mientras este método es el más directo para inicializar un esclavo, no es el único. Por ejemplo, si tiene una muestra de los datos del maestro, y el maestro tiene su ID de servidor y el log binario activo, puede preparar un esclavo sin parar el maestro o incluso sin bloquear actualizaciones para ello. Para más detalles, consulte Sección 6.9, “Preguntas y respuestas sobre replicación”.
Si quiere administrar la inicialización de una replicación MySQL, sugerimos que lea este capítulo entero y pruebe todos los comandos mencionados en Sección 13.6.1, “Sentencias SQL para el control de servidores maestros” y Sección 13.6.2, “Sentencias SQL para el control de servidores esclavos”. También debe familiarizarse con las opciones de arranque de replicación descritas en Sección 6.8, “Opciones de arranque de replicación”.
      Nota: este procedimiento y
      algunos de los comandos de replicación SQL mostrados en secciones
      posteriores necesita el privilegio SUPER.
    
Asegúrese de que las versiones de MySQL instalado en el maestro y en el esclavo son compatibles según dice la tabla mostrada en Sección 6.5, “Compatibilidad entre versiones de MySQL con respecto a la replicación”. Idealmente, debe usar la versión más reciente de MySQL en maestro y servidor.
Por favor no reporte bugs hasta que ha verificado que el problema está presente en la última versión de MySQL.
          Prepare una cuenta en el maestro que pueda usar el esclavo
          para conectar. Este cuenta debe tener el privilegio
          REPLICATION SLAVE . Si la cuenta se usa
          sólo para replicación (lo que se recomienda), no necesita
          dar ningún privilegio adicional. (Para información sobre
          preparar cuentas de usuarios y privilegios, consulte
          Sección 5.7, “Gestión de la cuenta de usuario MySQL”.)
        
          Suponga que su dominio es mydomain.com y
          que quiere crear una cuenta con un nombre de usuario de
          repl que puedan usar los esclavos para
          acceder al maestro desde cualquier equipo en su dominio usando
          una contraseña de slavepass. Para crear la
          cuenta, use el comando GRANT:
        
mysql> GRANT REPLICATION SLAVE ON *.*
    -> TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';
          Si quiere usar los comandos LOAD TABLE FROM
          MASTER o LOAD DATA FROM MASTER
          desde el servidor esclavo, necesita dar a esta cuenta
          privilegios adicionales:
        
              De a la cuenta el privilegio global
              SUPER y RELOAD .
            
              De el privilegio SELECT para todas las
              tablas que quiere cargar. Cualquier tabla maestra desde la
              que la cuenta no puede hacer un SELECT
              se ignoran por LOAD DATA FROM MASTER.
            
          Si usa sólo tablas MyISAM , vuelque todas
          las tablas y bloquee los comandos de escritura ejecutando un
          comando FLUSH TABLES WITH READ LOCK :
        
mysql> FLUSH TABLES WITH READ LOCK;
          Deje el cliente en ejecución desde el que lanza el comando
          FLUSH TABLES para que pueda leer los
          efectos del bloqueo. (Si sale del cliente, el bloqueo se
          libera.) Luego tome una muestra de los datos de su servidor
          maestro.
        
La forma más fácil de crear una muestra es usar un programa de archivo para crear una copia de seguidad binaria de las bases de datos en su directorio de datos del maestro. Por ejemplo. use tar en Unix, o PowerArchiver, WinRAR, WinZip, o cualquier software similar en Windos. Para usar tar para crear un archivo que incluya todas las bases de datos, cambie la localización en el directorio de datos del maestro, luego ejecute el comando:
shell> tar -cvf /tmp/mysql-snapshot.tar .
          Si quiere que el archivo sólo incluya una base de datos
          llamada this_db, use este comando:
        
shell> tar -cvf /tmp/mysql-snapshot.tar ./this_db
          Luego copie el archivo en el directorio
          /tmp del servidor esclavo. En esa
          máquina, cambie la localización al directorio de datos del
          esclavo, y desempaquete el fichero usando este comando:
        
shell> tar -xvf /tmp/mysql-snapshot.tar
          Puede no querer replicar la base de datos
          mysql si el servidor esclavo tiene un
          conjunto distinto de cuentas de usuario a la existente en el
          maestro. En tal caso, debe excluírla del archivo. Tampoco
          necesita incluir ningún fichero de log en el archivo, o los
          ficheros master.info o
          relay-log.info files.
        
          Mientras el bloqueo de FLUSH TABLES WITH READ
          LOCK está en efecto, lee el valor del nombre y el
          desplazamiento del log binario actual en el maestro:
        
mysql > SHOW MASTER STATUS; +---------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +---------------+----------+--------------+------------------+ | mysql-bin.003 | 73 | test | manual,mysql | +---------------+----------+--------------+------------------+
          La columna File muestra el nombre del log,
          mientras que Position muestra el
          desplazamiento. En este ejemplo, el valor del log binario es
          mysql-bin.003 y el desplazamiento es 73.
          Guarde los valores. Los necesitará más tarde cuando
          inicialice el servidor. Estos representan las coordenadas de
          la replicación en que el esclavo debe comenzar a procesar
          nuevas actualizaciones del maestro.
        
Una vez que tiene los datos y ha guardado el nombre y desplazamiento del log, puede reanudar la actividad de escritura en el maestro:
mysql> UNLOCK TABLES;
          Si está usando tablas InnoDB , debería
          usar la herramienta InnoDB Hot Backup.
          Realiza una copia consistente sin bloquear el servidor
          maestro, y guarda el nombre y desplazamiento del log que se
          corresponden a la copia para usarlo posteriormente en el
          esclavo. InnoDB Hot Backup es una
          herramienta no libre (comercial) que no está incluída en la
          distribución de MySQL estándar. Consulte la página web de
          InnoDB Hot Backup en
          http://www.innodb.com/manual.php para
          información detallada.
        
          Sin la herramienta Hot Backup , la forma
          más rápida de hacer una copia binaria de los datos de las
          tablas InnoDB es parar el maestro y copiar
          los ficheros de datos InnoDB, ficheros de
          log, y ficheros de definición de tablas (ficheros
          .frm). Para guardar los nombres de
          ficheros actual y desplazamientos, debe ejecutar el siguiente
          comando antes de parar el servidor:
        
mysql> FLUSH TABLES WITH READ LOCK; mysql> SHOW MASTER STATUS;
          Luego guarde el nombre del log y el desplazamiento desde la
          salida de SHOW MASTER STATUS como se
          mostró antes. Tras guardar el nombre del log y el
          desplazamiento, pare el servidor sin
          bloquear las tablas para asegurarse que el servidor para con
          el conjunto de datos correspondiente al fichero de log
          correspondiente y desplazamiento:
        
shell> mysqladmin -u root shutdown
          Una alternativa que funciona para tablas
          MyISAM y InnoDB es
          realizar un volcado SQL del maestro en lugar de una copia
          binaria como se describe en la discusión precedente. Para
          ello, puede usar mysqldump --master-data en
          su maestro y cargar posteriormente el fichero de volcado SQL
          en el esclavo. Sin embargo, esto es más lento que hacer una
          copia binaria.
        
          Si el maestro se ha ejecutado previamente sin habilitar
          --log-bin , el nombre del log y las
          posiciones mostradas por SHOW MASTER STATUS
          o mysqldump --master-data están vacíos.
          En ese caso, los valores que necesita usar posteriormente
          cuando especifica el fichero de log del esclavo y la posición
          son una cadena vacía ('') y
          4.
        
          Asegúrese que la sección [mysqld] del
          fichero my.cnf en el maestro incluye una
          opción log-bin . Esta sección debe
          también tener la opción
          server-id=master_id , donde
          master_id debe ser un entero positivo de 1
          a 2^32 - 1. Por ejemplo:
        
[mysqld] log-bin=mysql-bin server-id=1
Si estas opciones no están presentes, añádalas y reinicie el servidor.
          Pare el servidor que se vaya a usar como esclavo y añada lo
          siguiente a su fichero my.cnf :
        
[mysqld] server-id=slave_id
          El valor slave_id , como el valor
          master_id , debe ser un entero positivo de
          1 a 2^32 - 1. Además, es muy importante que el ID del esclavo
          sea diferente del ID del maestro. Por ejemplo:
        
[mysqld] server-id=2
          Si está preparando varios esclavos, cada uno debe tener un
          valor de server-id único que difiera del
          maestro y de cada uno de los otros esclavos. Piense en los
          valores de server-id como algo similar a
          las direcciones IP: estos IDs identifican unívocamente cada
          instancia de servidor en la comunidad de replicación.
        
          Si no especifica un server-id, se usa 1 si
          no ha definido un master-host, de otro modo
          se usa 2. Tenga en cuenta que en caso de omisión de
          server-id, un maestro rechaza conexiones de
          todos los esclavos, y un esclavo rechaza conectar a un
          maestro. Por lo tanto, omitir el server-id
          es bueno sólo para copias de seguridad con un log binario.
        
Si ha hecho una copia de seguridad binara de los datos del maestro, cópielo en el directorio de datos del esclavo antes de arrancar el esclavo. Asegúrese que los privilegios en los ficheros y directorios son correctos. El usuario que ejecuta el servidor MySQL debe ser capaz de leer y escribir los ficheros, como en el maestro.
Si hizo una copia de seguridad usando mysqldump, arranque primero el esclavo (consulte el siguiente paso).
          Arranque el esclavo. Si ha estado replicando préviamente,
          arranque el esclavo con la opción
          --skip-slave-start para que no intente
          conectar inmediatamente al maestro. También puede arrancar el
          esclavo con la opción --log-warnings
          (activada por defecto en MySQL 5.0), para obtener más
          mensajes en el log de errores acerca de problemas (por
          ejemplo, problemas de red o conexiones). En MySQL 5.0, las
          conexiones abortadas no se loguean en el log de errores a no
          ser que el valor sea mayor que 1.
        
Si hace una copia de seguridad de los datos del maestro usando mysqldump, cargue el fichero de volcado en el esclavo:
shell> mysql -u root -p < dump_file.sql
Ejecute los siguientes comandos en el esclavo, reemplazando los valores de opciones con los valores relevantes para su sistema:
mysql> CHANGE MASTER TO
    ->     MASTER_HOST='master_host_name',
    ->     MASTER_USER='replication_user_name',
    ->     MASTER_PASSWORD='replication_password',
    ->     MASTER_LOG_FILE='recorded_log_file_name',
    ->     MASTER_LOG_POS=recorded_log_position;
La siguiente tabla muestra la longitud máxima para las opciones de cadenas de caracteres:
| MASTER_HOST | 60 | 
| MASTER_USER | 16 | 
| MASTER_PASSWORD | 32 | 
| MASTER_LOG_FILE | 255 | 
Arranque el flujo esclavo:
mysql> START SLAVE;
Una vez realizado este procedimiento, el esclavo debe conectar con el maestro y atapar cualquier actualización que haya ocurrido desde que se obtuvieron los datos.
      Si ha olvidado asignar un valor para server-id
      en el maestro, los esclavos no son capaces de conectar.
    
      Si olvida asignar un valor para server-id en el
      esclavo, obtiene el siguiente error en el log de errores:
    
Warning: You should set server-id to a non-0 value if master_host is set; we will force server id to 2, but this MySQL server will not act as a slave.
También encuentra mensajes de error en el log de errores del esclavo si no es capaz de replicar por ninguna otra razón.
      Una vez que un esclavo está replicando, puede encontrar en su
      directorio de datos un fichero llamado
      master.info y otro llamado
      relay-log.info. El esclavo usa estos dos
      ficheros para saber hasta que punto ha procesado el log binario
      del maestro. No borre o edite
      estos ficheros, a no ser que realmente sepa lo que hace y entienda
      las implicaciones. Incluso en tal caso, es mejor que use el
      comando CHANGE MASTER TO.
    
      Nota: El contenido de
      master.info subedita algunas de las opciones
      especificadas en línea de comandos o en
      my.cnf. Consulte
      Sección 6.8, “Opciones de arranque de replicación” para más detalles.
    
Una vez que tiene una copia de los datos, puede usarlo para actualizar otros esclavos siguiendo las porciones del procedimiento descrito. No necesita otra muestra de los datos del maestro; puede usar la misma para todos los esclavos.
      Nota: para la mayor durabilidad y consistencia posible en una
      inicialización de replicación usando InnoDB
      con transacciones debe usar
      innodb_flush_logs_at_trx_commit=1,
      sync-binlog=1, y
      innodb_safe_binlog en su fichero
      my.cnf del maestro.
    
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

