第八步:查看主数据库的状态(并记录下File字段和Position字段的值,在配置从服务器时有用到) mysql> show master status; +------------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------------+----------+--------------+------------------+-------------------+ | mysqlmaster-bin.000004 | 327 | | | | +------------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) 第九步:创建主数据库的快照文件 [root@master ~]# cd /usr/bin/ # ./mysqldump -uroot -p -h127.0.0.1 -P3306 --all-databases --triggers --routines --events >>/mnt/windows/all.sql 上面命令中的红色部分,是一个共享目录,这个目录可以同时被主数据库服务器和从数据库服务器访问到。 如果没有这样的共享目录,可以将all.sql放在其它任何目录下,然后使用scp命令复制到远程从数据库服务器的某个目录中 这条命令的执行时间根据数据量的不同,会有所不同,如果主数据库的数据量很大,可能需要很长时间,那么在这种情况下,就最好在晚上没有业务的时候进行这个操作,否则第七步中的锁表操作会对业务系统造成很大的影响 第十步:解锁主数据库的锁表操作 [root@master ~]# mysql -uroot -p (本命令在主数据库服务器上执行) mysql> unlock tables; Query OK, 0 rows affected (0.00 sec) 第十一步:在从数据库服务器上导入第七步创建的快照文件到从数据库中 [root@slave ~]# mysql -uroot -p -h127.0.0.1 -P3306 < /mnt/windows/all.sql 第十二步:在从数据库服务器上设置主数据库服务器向从数据库服务器同步 [root@slave ~]# mysql -uroot -p mysql> change master to master_host = "192.168.1.100",master_user="repl",master_password="111111",master_log_file="mysqlmaster-bin.000004",master_log_pos=327; 注意:红色部分的值,是在第八步中查出来的,这里不能弄错了 第十三步:启动从数据库复制线程 mysql> start slave; Query OK, 0 rows affected (0.01 sec) 第十四步:查询从数据库的复制线程状态 复制代码 代码如下: mysql> show slave status G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.100 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysqlmaster-bin.000004 Read_Master_Log_Pos: 327 Relay_Log_File: slave-relay-bin.000002 Relay_Log_Pos: 289 Relay_Master_Log_File: mysqlmaster-bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 327 Relay_Log_Space: 462 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: 2e5e1b22-f0a9-11e3-bbac-000c297799e0 Master_Info_File: /var/lib/mysql/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 1 row in set (0.00 sec)
如果Slave_IO_Running和Slave_SQL_Running两项都为yes,就表示主从复制配置成功了. 下面可以开始测试配置是否成功了,首先在主数据库的test数据库中新建一张表,然后插入几条数据,然后到从数据库看看是否同步过来了。 注意:当从数据库有大量的查询时,可以暂时将从数据库的复制线程关闭掉,等查询量降下来了,再打开,这样也不会丢失数据。 附:一个优化好后的主数据库配置文件和从数据配置文件内容如下: 复制代码 代码如下: # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html [client] port=3306 socket=/usr/local/mysql/mysql.sock default-character-set=utf8
一个优化好的从数据库的配置文件如下: 复制代码 代码如下: # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html [client] port=3306 socket=/usr/local/mysql/mysql.sock default-character-set=utf8