rpm主从mysql报错1593_mysql主从同步

环境:centos7.3 mysql5.7

主mysql:192.168.1.71

从mysql:192.168.1.72

官网下载MYSQL5.7的rpm包,分别在两台服务器上顺序安装一下

rpm -ivh mysql-community-common-5.7.22-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-5.7.22-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-5.7.22-1.el7.x86_64.rpm

rpm -ivh mysql-community-server-5.7.22-1.el7.x86_64.rpm

mysql安装完后会在第一次启动时在错误日志文件中写入一个管理员密码。

使用mysql_secure_installation脚本进行初始化。完成后,mysql就安装完毕了。

这里我偷了一个懒,只对主服务器进行了初始化脚本,没有对从服务器初始化。直接COPY了主服务器的相关配置和数据库文件,造成了后面给自己挖了一个小坑。

先要在主服务器上新建一个账号,并且赋予REPLICATION SAVEL, REPLICATION CLIENT权限,用于主从同步,当然直接用root账号也是可以的。

现在开始配置主服务器:

编辑/etc/my.cnf

[mysqld]

datadir=/var/lib/mysql/#mysql数据库文件位置

socket=/var/lib/mysql/mysql.sock #Unix套接字位置

symbolic-links=0innodb_file_per_table=ON#开启innodb每个表一个文件

skip_name_resolve=ON#跳过域名反查

server_id=1#服务器ID(全局唯一)

log_bin=master-bin #开启logbin日志,并设置文件名

binlog_format=MIXED #二进制文件记录格式,MIXED混合模式。默认为ROW

#sync_binlog=1#同步写入binlog日志,开启会减低mysql性能,默认是1

#innodb_flush_log_at_trx_commit=1 #开启innodb每次事务提交时MySQL都会把log buffer的数据写入log file,最安全,默认就是1

#innodb_support_xa=ON#默认为ON

[mysqld_safe]

log-error=/var/log/mysql/mysql.log

pid-file=/var/run/mysql/mysql.pid

如果有某些数据库不想被同步比如mysql、sys、informaion_schema、performance_schema这种

可以在配置文件里设置

Binlog_Ignore_DB=mysql

Binlog_Ignore_DB=sys

...等

每个数据库设置一个,这样就不会记录binlog日志里,当然也就不会被同步啦。

重启主服务器mysql服务:

systemctrl restart mysqld

配置从服务器:

编辑/etc/my.cnf

[mysqld]

datadir=/var/lib/mysql/socket=/var/lib/mysql/mysql.sock

symbolic-links=0innodb_file_per_table=ON

skip_name_resolve=ON

server_id=2#全局唯一服务器ID号

relay_log=relay-log#开始中继日志功能,并设置文件名

relay_log_index=relay-log.index#设置中级日志索引文件名称#skip_slave_start=ON #服务启动时不自动启动复制线程read_only=ON #设置从服务器只读

[mysqld_safe]

log-error=/var/log/mysql/mysql.log

pid-file=/var/run/mysql/mysql.pid

重启从服务器mysql服务:

systemctrl restart mysqld

使用mysql客户端登入到从服务器执行相关命令:

mysql > CHANGE MASTER TO MASTER_HOST='192.168.1.71', MASTER_USER='root', MASTER_PASSWORD='!QAZ2wsx', MASTER_PORT=3306, MASTER_LOG_FILE='master-bin.000005', MASTER_LOG_POS=154;

mysql > START SLAVE;

主从同步已经完成了。

注:这里的MASTER_LOG_FILE='master-bin.000005', MASTER_LOG_POS=154;必须是主服务器上的当前MASTER_LOG_FILE和POS。也就是说从服务器会去判断从哪个节点开始和主服务器同步。可以mysql客户端登入主服务器查询

mysql>show master status;+-------------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+-------------------+----------+--------------+------------------+-------------------+

| master-bin.000005 | 154 | | | |

+-------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

理论上主从同步已经可以开始正常工作了。但是我之前给自己挖的坑这个时候出现了。。。。

从服务器并没有和主服务器同步:

查看从服务器状态:

mysql > show slave status\G

*************************** 1. row ***************************Slave_IO_State:

Master_Host:192.168.1.71Master_User: mysql_slave

Master_Port:3306Connect_Retry:60Master_Log_File: master-bin.000007Read_Master_Log_Pos:856Relay_Log_File: relay-log.000009Relay_Log_Pos:4Relay_Master_Log_File: master-bin.000007Slave_IO_Running: No

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:0Last_Error:

Skip_Counter:0Exec_Master_Log_Pos:856Relay_Log_Space:154Until_Condition: None

Until_Log_File:

Until_Log_Pos:0Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: NULL

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno:1593Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different forreplication to work.

Last_SQL_Errno:0Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id:1Master_UUID: 8f0581c9-695b-11e8-951e-000c295cdfc6

Master_Info_File:/var/lib/mysql/master.infoSQL_Delay:0SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waitingfor moreupdates

Master_Retry_Count:86400Master_Bind:

Last_IO_Error_Timestamp:180607 11:04:56Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set:

Executed_Gtid_Set:

Auto_Position:0Replicate_Rewrite_DB:

Channel_Name:

Master_TLS_Version:1 row in set (0.00 sec)

Slave_IO_Running: No

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

从服务器的IO进程并没有运行起来,错误原因主从服务器使用了相同的UUIDs

这就是之前复制留下来的坑。当我把所有的数据库文件复制过来的时候原来生成的UUIDs也一并复制了。所以出现了这个问题

处理起来也不难,UUIDs存放在mysql数据目录auto.cnf文件下

我直接编辑从服务器的文件

vim /var/lib/mysql/auto.cnf

[auto]

server-uuid=8f0581c9-695b-11e8-951e-000c295cdfc9#随便改个数字就行了。。。。16进制的,

然后重启从服务器mysql服务重新查看从服务器状态

mysql > show slave status\G

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Last_IO_Errno: 0

Last_IO_Error:

主从同步已经开始工作了

后记:虽然对从服务器使用了read_only = True设置,但是发现从服务器仍然可以被写入数据。原因是read_only只对普通用户有效,并不能对root账号等超级管理员账号起效。特此备注

注:MySQL中设置read_only=1后,普通的应用用户进行insert、update、delete等会产生数据变化的DML操作时,都会报出数据库处于只读模式不能发生数据变化的错误,但具有super权限的用户,例如在本地或远程通过root用户登录到数据库,还是可以进行数据变化的DML操作

注2:如果需要对super用户进行限制,可以是用super_read_only=1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值