主节点:192.168.199.202 root
从节点:192.168.199.201 root
1.配置mysqld.cnf配置文件
主节点:
$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
# 打开配置文件,在[mysqld]模块里注释掉bind-address,用来允许远程访问数据库。
# 并在主服务器的[mysqld]模块里添加以下代码:
server-id = 1 #server-id 服务器唯一标识
log_bin = master-bin #log_bin 启动MySQL二进制日志
log_bin_index = master-bin.index
binlog_do_db = registry #binlog_do_db 指定记录二进制日志的数据库
binlog_ignore_db = mysql #binlog_ignore_db 指定不记录二进制日志的数据库
从节点:
$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
# 打开配置文件,在[mysqld]模块里注释掉bind-address,用来允许远程访问数据库。
# 并在主服务器的[mysqld]模块里添加以下代码:
server-id = 2
replicate-do-db =registry
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index
2.在主节点注册同步账户:
$ mysql -uroot -p
mysql > grant replication slave,reload,super on *.* to slave @192.168.199.202 identified by 'mypassword'
mysql > FLUSH PRIVILEGES;
3.在从节点备份主节点database并在从节点载入:
从节点:
# 保存主节点databases
$ mysqldump -h 192.168.199.202 -uroot -p --all-databases --lock-all-tables > ~/master_db.sql
# 从节点加载主节点databases
$ mysql -uroot -p < ~/master_db.sql
4.重启主从节点的mysql服务:
主从节点:
$ sudo systemctl restart mysql
5.查看主节点master状态:
mysql > show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000002 | 154 | registry | mysql | |
+-------------------+----------+--------------+------------------+-------------------+
记住查询出来的file_set和Position字段的值。
在从节点的数据库命令行里输入下列代码
# 登录Slave从服务器,连接Master主服务器。
mysql > change master to master_host='192.168.199.202', master_user='slave', master_password='mydbpassword',master_log_file='master-bin.000002', master_log_pos=154;
# 在登录slave服务器MySQL的状态下启动数据同步
mysql > start slave;
# 登录slave服务器MySQL的状态下查看同步状态,Slave_IO_Running: Yes && Slave_SQL_Running: Yes表示slave正常运行。
mysql > show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.199.202
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000002
Read_Master_Log_Pos: 294
Relay_Log_File: slave-relay-bin.000007
Relay_Log_Pos: 461
Relay_Master_Log_File: master-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: registry
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: 294
Relay_Log_Space: 883
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: 56d93174-d348-11e8-8acb-e0d55e87f46c
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 more updates
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
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
ERROR:
No query specified
6. Debug
如果show slave status;时出现表不存在错误,重新同步一下两个表的内容。
7. 如果想要双主复制,只需将主节点和从节点的操作反过来再做一遍就可以了
参考资料: