事情的起因是这样的,我在学习MySQL数据库主从配置的时候,完成基本的配置文件设置:
# 主库的 /etc/my.cnf 添加以下内容
# 服务的唯一编号
server-id = 1
# 开启mysql binlog功能
log-bin = mysql-bin
# binlog记录内容的方式,记录被操作的每一行
binlog_format = ROW
# 减少记录日志的内容,只记录受影响的列
binlog_row_image = minimal
# 指定需要复制的数据库名为looking
binlog-do-db = looking
# 从库的 /etc/my.cnf 添加以下内容
# 服务的唯一编号
server-id = 2
# 开启mysql binlog功能
log-bin = mysql-bin
# binlog记录内容的方式,记录被操作的每一行
binlog_format = ROW
# 减少记录日志的内容,只记录受影响的列
binlog_row_image = minimal
# 指定需要复制的数据库名为looking
replicate-do-db = looking
然后先在192.168.128.139主机上用root登入数据库,接着按照下面进行操作(我主库IP:192.168.128.139,从库IP:192.168.128.138):
# 主库操作
mysql> create user 'looking'@'192.168.128.138' identified by '12345678';
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave on *.* to 'looking'@'192.168.128.138' identified by '12345678';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> select user, host from mysql.user;
+---------------+-----------------+
| user | host |
+---------------+-----------------+
| looking | 192.168.128.138 |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------------+
4 rows in set (0.00 sec)
mysql> flush privileges;
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 4392
Binlog_Do_DB: looking
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
ERROR:
No query specified
mysql>
接着准备在从库上 (192.168.128.138)进行登录,结果报了下面这个错:
# 从库操作
[root@192 etc]# mysql -ulooking -h 192.168.128.139 -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.128.139' (113)
我一看,账号和密码也都对着,主机IP也都对着,怎么会连不上呢?错误提示是无法连接,这样的话看起来应该和密码啥的没太大关系,一般密码错误的话大概率会报错拒绝访问Access denied。然后看到有一篇文章上说要远程连接数据库的话,需要关闭防火墙或者开放3306端口(很重要),于是一试,确实可以成功登陆上了:
# 主库操作
[root@192 mysql]# systemctl stop firewalld
[root@192 mysql]#
or
[root@192 mysql]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
success
################# iptables -I INPUT -p tcp --dport 80 -j ACCEPT 设置运行访问80端口
# 从库操作
[root@192 etc]# mysql -ulooking -h 192.168.128.139 -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 5.7.26-log MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
因为我的从库是从主库clone过来的,所以还会报UUID相同的错误,不过只要修改一下auto.cnf文件就好了。
那这个文件在什么路径呢,听我娓娓道来。在 /etc/my.cnf 里边有一个 参数配置:
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
然后 cd 到 datadir 对应的路径,这里是:cd /var/lib/mysql,切换过去以后,就可以在目录下看到我们要找的文件啦。
# 从库操作
[root@192 mysql]# ll
total 122984
-rw-r-----. 1 mysql mysql 205 Apr 10 16:36 192-relay-bin.000001
-rw-r-----. 1 mysql mysql 320 Apr 10 16:36 192-relay-bin.000002
-rw-r-----. 1 mysql mysql 46 Apr 10 16:36 192-relay-bin.index
-rw-r-----. 1 mysql mysql 56 Apr 10 16:31 auto.cnf
-rw-------. 1 mysql mysql 1679 Jul 17 2019 ca-key.pem
[root@master mysql]# cat auto.cnf
[auto]
server-uuid=93733866-a87b-11e9-8795-000c2915b0b5
然后从库重新配置一下,就可以得到两个梦寐以求的Yes了,之后在主库的修改,就会被同步到从库来:
# 从库操作
mysql> change master to master_host='192.168.128.139',master_user='looking',master_password='12345678',master_log_file='mysql-bin.000001',master_log_pos=4392;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.128.139
Master_User: looking
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 4392
Relay_Log_File: 192-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: looking
要想用looking账户登录查看数据表的变更等,需要在主库使用root对'looking'@'192.168.128.138'的一些基本操作进行授权,然后就可以切换数据库,查看数据表了:
# 主库操作
mysql> grant select, insert, update on looking.* to 'looking'@'192.168.128.138';
Query OK, 0 rows affected (0.01 sec)
当然,因为开启了日志记录功能,所以如果操作的次数越多,目录文件下的日志块也就越多(主从库都一样):
[root@master audio_recognition]# cd /var/lib/mysql
[root@master mysql]# ll
total 123020
-rw-r-----. 1 mysql mysql 56 Jul 17 2019 auto.cnf
-rw-------. 1 mysql mysql 1679 Jul 17 2019 ca-key.pem
-rw-r--r--. 1 mysql mysql 1107 Jul 17 2019 ca.pem
-rw-r--r--. 1 mysql mysql 1107 Jul 17 2019 client-cert.pem
-rw-------. 1 mysql mysql 1675 Jul 17 2019 client-key.pem
-rw-r-----. 1 mysql mysql 311 Apr 23 09:58 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 Apr 23 16:02 ibdata1
-rw-r-----. 1 mysql mysql 50331648 Apr 23 16:02 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 Jul 17 2019 ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 Apr 23 15:58 ibtmp1
drwxr-x---. 2 mysql mysql 228 Apr 23 16:02 looking
-rw-r-----. 1 mysql mysql 98 Apr 23 16:07 master.info
-rw-r-----. 1 mysql mysql 154 Apr 23 16:07 master-relay-bin.000001
-rw-r-----. 1 mysql mysql 26 Apr 23 16:07 master-relay-bin.index
drwxr-x---. 2 mysql mysql 4096 Jul 17 2019 mysql
-rw-r-----. 1 mysql mysql 154 Apr 23 16:16 mysql-bin.000001
-rw-r-----. 1 mysql mysql 6986 Apr 11 12:31 mysql-bin.000001
-rw-r-----. 1 mysql mysql 154 Apr 15 16:37 mysql-bin.000002
-rw-r-----. 1 mysql mysql 154 Apr 17 16:08 mysql-bin.000003
-rw-r-----. 1 mysql mysql 154 Apr 17 17:48 mysql-bin.000004
-rw-r-----. 1 mysql mysql 154 Apr 21 09:31 mysql-bin.000005
-rw-r-----. 1 mysql mysql 177 Apr 21 09:31 mysql-bin.000006
-rw-r-----. 1 mysql mysql 154 Apr 22 11:27 mysql-bin.000007
-rw-r-----. 1 mysql mysql 154 Apr 23 09:58 mysql-bin.000008
-rw-r-----. 1 mysql mysql 177 Apr 23 09:58 mysql-bin.000009
-rw-r-----. 1 mysql mysql 19 Apr 23 16:16 mysql-bin.index
srwxrwxrwx. 1 mysql mysql 0 Apr 23 09:58 mysql.sock
-rw-------. 1 mysql mysql 5 Apr 23 09:58 mysql.sock.lock
drwxr-x---. 2 mysql mysql 8192 Jul 17 2019 performance_schema
-rw-------. 1 mysql mysql 1675 Jul 17 2019 private_key.pem
-rw-r--r--. 1 mysql mysql 451 Jul 17 2019 public_key.pem
-rw-r-----. 1 mysql mysql 59 Apr 23 16:07 relay-log.info
-rw-r--r--. 1 mysql mysql 1107 Jul 17 2019 server-cert.pem
-rw-------. 1 mysql mysql 1679 Jul 17 2019 server-key.pem
drwxr-x---. 2 mysql mysql 8192 Jul 17 2019 sys
drwxr-x---. 2 mysql mysql 20 Apr 10 17:53 test_db
drwxr-x---. 2 mysql mysql 4096 Apr 23 15:03 WAIHU
可以在执行 reset master命令清除日志文件:
mysql> reset master;
Query OK, 0 rows affected (0.01 sec)
[root@master mysql]# ll
total 122980
-rw-r-----. 1 mysql mysql 56 Jul 17 2019 auto.cnf
-rw-------. 1 mysql mysql 1679 Jul 17 2019 ca-key.pem
-rw-r--r--. 1 mysql mysql 1107 Jul 17 2019 ca.pem
-rw-r--r--. 1 mysql mysql 1107 Jul 17 2019 client-cert.pem
-rw-------. 1 mysql mysql 1675 Jul 17 2019 client-key.pem
-rw-r-----. 1 mysql mysql 311 Apr 23 09:58 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 Apr 23 16:02 ibdata1
-rw-r-----. 1 mysql mysql 50331648 Apr 23 16:02 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 Jul 17 2019 ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 Apr 23 15:58 ibtmp1
drwxr-x---. 2 mysql mysql 228 Apr 23 16:02 looking
-rw-r-----. 1 mysql mysql 98 Apr 23 16:07 master.info
-rw-r-----. 1 mysql mysql 154 Apr 23 16:07 master-relay-bin.000001
-rw-r-----. 1 mysql mysql 26 Apr 23 16:07 master-relay-bin.index
drwxr-x---. 2 mysql mysql 4096 Jul 17 2019 mysql
-rw-r-----. 1 mysql mysql 154 Apr 23 16:16 mysql-bin.000001
-rw-r-----. 1 mysql mysql 19 Apr 23 16:16 mysql-bin.index
srwxrwxrwx. 1 mysql mysql 0 Apr 23 09:58 mysql.sock
-rw-------. 1 mysql mysql 5 Apr 23 09:58 mysql.sock.lock
drwxr-x---. 2 mysql mysql 8192 Jul 17 2019 performance_schema
-rw-------. 1 mysql mysql 1675 Jul 17 2019 private_key.pem
-rw-r--r--. 1 mysql mysql 451 Jul 17 2019 public_key.pem
-rw-r-----. 1 mysql mysql 59 Apr 23 16:07 relay-log.info
-rw-r--r--. 1 mysql mysql 1107 Jul 17 2019 server-cert.pem
-rw-------. 1 mysql mysql 1679 Jul 17 2019 server-key.pem
drwxr-x---. 2 mysql mysql 8192 Jul 17 2019 sys
drwxr-x---. 2 mysql mysql 20 Apr 10 17:53 test_db
drwxr-x---. 2 mysql mysql 4096 Apr 23 15:03 WAIHU