MySQL数据库复制可以将一个数据库副本从一个MySQL服务器(称作主服务器)复制到另一个MySQL服务器(称作从服务器)。复制可以通过多种方式来实现,包括:复制所有数据库、复制单个数据库或者复制选定的数据表。如果原始服务器出现故障,复制将保留其它服务器上与原始服务器相同的副本,从服务器可以继续提供服务。
mysql>CHANGE MASTER TO ->MASTER_HOST='30.20.10.10', ->MASTER_USER='repl_user', ->MASTER_PASSWORD='password', ->MASTER_LOG_FILE='mysql-bin.000001', ->MASTER_LOG_POS=501; mysql>START SLAVE;
在MySQL中,进行数据库复制需要先启用二进制日志记录功能(Binary Logging),主服务器将日志记录到二进制日志文件中。因此,在从服务器上进行的复制就是通过读取主服务器的二进制日志文件中的记录来复制数据。需要注意的是,在从服务器上执行复制操作之前,必须停止从服务器对于对应的数据库进行写操作,否则复制操作会产生异常,出现数据错误的情况。
此外,MySQL还提供了一种基于Row(行)的复制方式,在执行复制操作时,主服务器产生的更新日志将不再是SQL语句,而是记录被更新的行的内容。这种方式在执行复制操作时,可以减少SQL语句的解析和重放,从而提高复制的效率。
mysql>CREATE TABLE `testreplica`.`sample` ( `id` int(11) NOT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; mysql>INSERT INTO `testreplica`.`sample` (`id`, `name`) VALUES (1, 'sample1');
在进行基于Row的复制时,需要注意对于MyISAM类型的表将不能使用该方式。此外在进行复制时,可以通过使用SHOW SLAVE STATUS命令来查看复制操作是否正常执行,进而在出现问题时及时修复错误,保证复制操作能够成功。