mysql5.7.26做主从复制配置

时间:2023-12-24 18:14:37

一、首先两台服务器安装好mysql数据库环境

参照linux rpm方式安装mysql5.1

https://www.cnblogs.com/sky-cheng/p/10564604.html

二、主库master上创建主从复制账号

mysql> grant replication slave,replication client on *.* to 'repl'@'%' identified by 'Zaq1xsw@';
Query OK, rows affected, warning (0.00 sec)
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> select user,host from user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| repl | % |
| root | % |
| mysql.session | localhost |
| mysql.sys | localhost |
+---------------+-----------+
rows in set (0.00 sec)

三、Master、Slave上分别设置不同的Server_id,主库上开启二进制日志

mysql> show variables like '%server_id%';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| server_id | |
| server_id_bits | |
+----------------+-------+

如果配置文件没有设置server_id参数,则默认都是0

编辑/etc/my.cnf

添加service_id,它的值可以跟服务器的IP最后一位数字一样,这样就能保证内网中的服务器ID不重复。master上

server_id=
log-bin=master
binlog_format=row

slave上

server_id=

四、将主库做一次全量备份,并恢复到从库上

在主库上操作

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
rows in set (0.00 sec)

主库有一个test数据库

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test |
+----------------+
row in set (0.00 sec)

有一个test表

mysql> select * from test;
+------+------+
| id | name |
+------+------+
| | aaaa |
+------+------+
row in set (0.00 sec)

表里有一条数据,开始备份主库

[root@node2 data]# mysqldump -uroot -p --all-databases > /home/mysql-5.7./bak/bak.sql
[root@node2 data]# scp -P25601 /home/mysql-5.7.26/bak/bak.sql root@172.28.18.69:/home/mysql-5.7.26/bak/ 在从库上操作,恢复主库数据
[root@localhost log]# mysql -uroot -p < /home/mysql-5.7./bak/bak.sql
Enter password:
[root@localhost log]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is
Server version: 5.7. MySQL Community Server (GPL) Copyright (c) , , 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> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
rows in set (0.00 sec) mysql>

此时,从库里test数据库有了,里面也有test数据表里记录

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
rows in set (0.00 sec) mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> select * from test
-> ;
+------+------+
| id | name |
+------+------+
| | aaaa |
+------+------+
row in set (0.01 sec)

五、在slave上change msater 操作配置主从复制

首先获取主库日志文件名称和偏移量

mysql> show master status \G;
*************************** . row ***************************
File: master.
Position:
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
row in set (0.00 sec) ERROR:
No query specified mysql>

在从库上执行

mysql> change master to
-> master_host='172.28.18.103',
-> master_port=,
-> master_user='repl',
-> master_password='Zaq1xsw@',
-> master_log_file='master.000001',
-> master_log_pos=;
Query OK, rows affected, warnings (0.21 sec)

启动从库

mysql> start slave;
Query OK, rows affected (0.01 sec)

查看从库状态

mysql> show slave status\G;
*************************** . row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.28.18.103
Master_User: repl
Master_Port:
Connect_Retry:
Master_Log_File: master.
Read_Master_Log_Pos:
Relay_Log_File: localhost-relay-bin.
Relay_Log_Pos:
Relay_Master_Log_File: master.
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:
Last_Error:
Skip_Counter:
Exec_Master_Log_Pos:
Relay_Log_Space:
Until_Condition: None
Until_Log_File:
Until_Log_Pos:
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master:
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno:
Last_IO_Error:
Last_SQL_Errno:
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id:
Master_UUID: ddbee8c3-76da-11e9--90b11c15be09
Master_Info_File: /home/mysql-5.7./data/master.info

此时:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

主从复制配置已经生效

六、测试数据

在主库插入一条数据

mysql> insert test values(,'bbbb');
Query OK, row affected (0.03 sec)

从库上查询

mysql> select * from test;
+------+------+
| id | name |
+------+------+
| | aaaa |
| | bbbb |
+------+------+
rows in set (0.00 sec)

数据已经复制成功了。