mysql5.7.22 主从配置_Centos7下mysql5.7.22主从配置

一:服务器配置

1.1修改root密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxx';

1.2添加远程登陆用户:

GRANT ALL PRIVILEGES ON *.* TO 'abc'@'%' IDENTIFIED BY 'xxxx' WITH GRANT OPTION;

1.3统一默认编码:

vim /etc/my.cnf 在 [mysqld]下添加编码配置:

[mysqld]

character_set_server=utf8

init_connect='SET NAMES utf8'

二:主从配置(主):

2.1vim /etc/my.cnf 在 [mysqld]下添加:

#要给从机同步的库

binlog-do-db=test

#不给从机同步的库(多个写多行)

binlog-ignore-db=mysql

binlog-ignore-db=information_schema

binlog-ignore-db=performance_schema

binlog-ignore-db=sys

#自动清理 7 天前的log文件,可根据需要修改

expire_logs_days=7

# 启用二进制日志

log-bin=mysql-bin

# 服务器唯一ID,一般取IP最后一段

server-id=101

2.2 开启log_bin 在 [mysqld]下添加:

log-bin = mysql-bin

server-id = 072

重启服务:

systemctl restart mysqld

查看是log_bin否启动:

mysql -u root -p

mysql> show variables like '%log_bin%';

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

| Variable_name | Value |

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

| log_bin | ON |

| log_bin_basename     | /usr/local/mysql/data/mysql-bin |

| log_bin_index     | /usr/local/mysql/data/mysql-bin.index |

| log_bin_trust_function_creators | OFF |

| log_bin_use_v1_row_events | OFF |

| sql_log_bin | ON |

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

6 rows in set (0.01 sec)

2.3重启服务器

reboot

2.4建立备份账号并授权

mysql>GRANT FILE ON *.* TO 'backup'@'%' IDENTIFIED BY 'xxxx';

mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by 'xxxx';

刷新权限列表:

flush privileges;

取消用户授权:

revoke all on *.* from backup;

2.5查询主服务器的状态:

show master status;

mysql> show master status;

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| mysql-bin.000002 | 735 | test01 | mysql,information_schema,performance_schema,sys | |

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

1 row in set (0.00 sec)

三:主从配置(从):

3.1拷贝主mysql的my.cnf文件到从服务器,替换从my.cnf,并修改如下配置:

scp /etc/my.cnf root@192.168.x.x:/etc/my.cnf

server-id = 2

加上以下参数可以避免更新不及时,SLAVE 重启后导致的主从复制出错。

read_only = 1

master_info_repository=TABLE

relay_log_info_repository=TABLE

3.2配置从mysql:

change master to master_host='x.x.x.x',master_port=3306,master_user='backup',master_password='xxx',master_log_file='mysql-bin.000002',master_log_pos=735;

注!!!语句中间不要断开,master_port为mysql服务器端口号(无引号),master_user为执行同步操作的数据库账户,“120”无单引号(此处的735就是show master status 中看到的position的值,这里的mysql-bin.000002就是file对应的值)。

如报错:

ERROR 29 (HY000): File '/var/log/mysql-relay-index.index' not found (Errcode: 13 - Permission denied)

编辑my.cnf文件,把log文件集中到/var/log/mysql目录:

[mysqld]

relay_log = /var/log/mysql/mysql-relay-bin

relay_log_index = /var/log/mysql/mysql-relay-index

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

修改/var/log/mysql目录权限:

chown -R mysql:mysql /var/log/mysql/

重启mysql

systemctl restart mysqld

进入mysql,再次运行change配置

3.3正确执行后启动Slave同步进程

mysql> start slave;

查看从服务器状态

show slave status \G

\G后不加;号

输出:

Slave_IO_Running: No

Slave_SQL_Running: Yes

两个必须为Yes才是正确启动!!!

查看log文件:

vim /var/log/mysql/mysql-error.err

2019-01-16T02:17:02.480802Z 2 [ERROR] Slave I/O for channel '': 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. Error_code: 1593

因从虚拟机为主安装mysql后拷贝生成,造成主从mysql UUID值相同,需要修改为不同值:

找到data文件夹下的auto.cnf文件,修改里面的uuid值,保证各个db的uuid不一样,重启db即可

重启mysql

systemctl restart mysqld

再次查看从服务器状态:

mysql> show slave status \G

mymsql> show slave status \G

*************************** 1. row ***************************

Slave_IO_State: Waiting to reconnect after a failed registration on master

Master_Host: 192.168.10.11

Master_User: backup

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000002

Read_Master_Log_Pos: 735

Relay_Log_File: mysql-relay-bin.000003

Relay_Log_Pos: 4

Relay_Master_Log_File: mysql-bin.000002

Slave_IO_Running: Connecting

Slave_SQL_Running: Yes

还是报错:

Slave_IO_Running: Connecting

查看log文件:

2019-01-16T02:53:53.094695Z 7 [ERROR] Slave I/O for channel '': Master command COM_REGISTER_SLAVE failed: Access denied for user 'backup'@'%' (using password: YES) (Errno: 1045), Error_code: 1597

重新赋权:

mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by 'xxxx';

切记要刷新:

flush privileges;

mysql> stop slave;

mysql> start slave;

mysql> show slave status \G

mysql> show slave status \G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.100.72

Master_User: wxjcbackup

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000002

Read_Master_Log_Pos: 2708

Relay_Log_File: mysql-relay-bin.000006

Relay_Log_Pos: 320

Relay_Master_Log_File: mysql-bin.000002

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

如果show slave status \G

报错:

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

Slave_IO_Running: No

Slave_SQL_Running: Yes

....

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

在主mysql下运行:

mysql> show master status;

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| mysql-bin.000004 | 154 | test01 | mysql,information_schema,performance_schema,sys | |

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

1 row in set (0.00 sec)

在从mysql下运行:

mysql> show master status;

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| mysql-bin.000006 | 154 | test01 | mysql,information_schema,performance_schema,sys | |

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

1 row in set (0.00 sec)

两个file编号不一致,以主为准,重新定位:

stop slave;

change master to master_host='x.x.x.x',master_port=3306,master_user='backup',master_password='xxx',master_log_file='mysql-bin.000004',master_log_pos=154;

start slave;

show slave status;

mysql> show slave status \G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.10.11

Master_User: backup

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000004

Read_Master_Log_Pos: 154

Relay_Log_File: mysql-relay-bin.000002

Relay_Log_Pos: 320

Relay_Master_Log_File: mysql-bin.000004

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

四:测试同步:

查看主服务器数据库:

mysql> show databases;

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

| Database |

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

| information_schema |

| mysql |

| performance_schema |

| sys |

| testdb |

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

5 rows in set (0.01 sec)

主库新建数据库:

mysql> create database testdb02;

Query OK, 1 row affected (0.00 sec)

从库查看数据库同步情况:

mysql> show databases;

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

| Database |

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

| information_schema |

| mysql |

| performance_schema |

| sys |

| testdb |

| testdb01 |

| testdb02 |

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

7 rows in set (0.00 sec)

关闭掉主数据库的读取锁定

unlock tables;

show databases;

use test;

show tables;

感谢:

https://blog.csdn.net/happy_pinocchio/article/details/79592422

五:重新做主从,完全同步 (适用于主库从库的数据相差较大;要求数据完全统一的情况 )

5.1 先进入主库,进行锁表,此处锁定为只读状态,防止数据写入

(可选,因如有数据库备份,可直接利用备份)

flush tables with read lock;

5.2 进行数据备份,把数据备份为.sql的文件

(可选,因如有数据库备份,可直接利用备份)

切换到mysql用户

su mysql

mysqldump -uroot -p‘密码’  --all-databases > /data/mysql/backup/mysql.back.sql

如报错:

先查看vim /etc/profile是否添加mysql环境变量,如没有则添加

export PATH=$PATH:/usr/local/mysql/bin

export PATH

5.3 进入主库,进行解锁

(可选,因如有数据库备份,可直接利用备份)

unlock tables;

5.4 把mysql的备份文件传输到从库服务器上

(位置任意,但要能找到)

scp -r /data/mysql/backup/mysql.bask.sql root@mysql02:/data/mysql/backup/

5.5 进入从库,停止从库的状态

stop slave;

清除slave上的同步位置,删除所有旧的同步日志,使用新的日志重新开始.(使用前先停止slave服务)

reset slave;(可选)

5.6 在从库中导入数据备份

source /data/mysql/backup/mysql.back.sql ;

mysql -uroot -p‘....’  database -f < /data/mysql/backup/mysql.bask.sql

(-f 为跳过错误的Sql,继续往下执行,可不加)

5.7 重新设置从库同步

change master to master_host = '主库的IP’, master_user = '设置主从时设定的主库的用户', master_port=主库的端口, master_password='主库设定的密码', master_log_file = 'mysqld-bin.xxxxxx', master_log_pos=xxxx;

注意: master_log_file与master_log_pos 是主库show master status信息里的| File与Position

5.8 重新开启从库同步

start slave;

5.9 查看同步状态

mysql> show slave status\G

查看:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

感谢:

https://blog.csdn.net/GX_1_11_real/article/details/80658527

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值