1.3 复制如何工做mysql
总体上来讲,复制有3个步骤:下图描述了复制的过程:sql
负责在主、从服务器传输各类修改动做的媒介是主服务器的二进制变动日志,这个日志记载着须要传输给从服务器的各类修改动做。所以,主服务器必须激活二进制日志功能。从服务器必须具有足以让它链接主服务器并请求主服务器把二进制变动日志传输给它的权限。数据库
MariaDB [(none)]> CREATE USER 'tom'@'172.16.41.2' IDENTIFIED BY 'qazwsx123'; MariaDB [(none)]> REVOKE ALL PRIVILEGES ,GRANT OPTION FROM 'tom'@'172.16.41.2'; MariaDB [(none)]> GRANT RELOAD,LOCK TABLES, REPLICATION CLIENT ,REPLICATION SLAVE ON *.* TO 'tom'@'172.16.41.2'; MariaDB [(none)]> FLUSH PRIVILEGES服务器 |
(2)启用二进制日志
主配置文件/etc/my.cnf [mysqld]段中,修改以下行:ide
log-bin = /mydata/binlogs/master-bin |
server-id = 1 |
server-id = 2 |
#log-bin = /mydata/mysql-bin //加上注释测试 relay-log = /mydata/relaylogs/relay-binspa |
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'relay_log'; +---------------+-----------------------------+ | Variable_name | Value | +---------------+-----------------------------+ | relay_log | /mydata/relaylogs/relay-bin | +---------------+-----------------------------+ 1 row in set (0.00 sec) |
(3)链接Master服务器
MariaDB [(none)]> CHANGE MASTER TO MASTER_USER='tom', MASTER_HOST='172.16.41.1', MASTER_PASSWORD='qazwsx123' ; MariaDB [(none)]> SHOW SLAVE STATUS\G; 在输出的结果当中: Slave_IO_Running: No Slave_SQL_Running: No 代表slave尚未开始复制过程。日志的位置为4而不是0,这是由于0只是日志文件的开始位置,并非日志位置。实际上,MySQL知道的第一个事件的位置是4。 |
(4)在Slave上面启动复制线程:
MariaDB [(none)]> START SLAVE; MariaDB [(none)]> SHOW SLAVE STATUS\G slave的I/O和SQL线程都已经开始运行,并且Seconds_Behind_Master再也不是NULL。日志的位置增长了,意味着一些事件被获取并执行了。若是你在master上进行修改,你能够在slave上看到各类日志文件的位置的变化,一样,你也能够看到数据库中数据的变化。 你可查看master和slave上线程的状态。在master上,你能够看到slave的I/O线程建立的链接: 在master上输入show processlist\G; MariaDB [(none)]> SHOW PROCESSLIST\G 行2为处理slave的I/O线程的链接。 在slave服务器上运行该语句: MariaDB [(none)]> SHOW PROCESSLIST\G 行2为SQL线程状态,行3为I/O线程状态. |
2.测试
(1)在Master上面建立一个数据库:
MariaDB [(none)]> CREATE DATABASES testdb1; |
(2)在Slave上面查看:
MariaDB [(none)]> SHOW DATABASES; +--------------------+ |
OK!已经同步过来了,下面为第二种状况假如master已经运行好久了,想对新安装的slave进行数据同步,甚至它没有master的数据。如何指定一个位置开始同步复制:为了效果我将在Master中导入一些新数据,而且将Slave恢复到最初状态;
在Master上的操做:
(1)导入新数据:
[root@Master ~]# mysql < hellodb.sql MariaDB [(none)]> SHOW MASTER STATUS; 此时我对数据库插入一些数据并备份: MariaDB [(none)]> CREATE DATABASE testdb; |
(2)在从服务器上导入:
[root@Slave ~]# mysql < all.sql MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='172.16.41.1', MASTER_USER='tom', MASTER_PASSWORD='qazwsx123', MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=367; MariaDB [(none)]> START SLAVE; |
OK! 简单的主从复制到此结束! |
MySQL简单复制应用扩展: echo "*/5 * * * * /usr/sbin/ntpdate YOUR NTP_SERVER_IP" >> /var/cron/root |
未完,有续!