设置MySQL同步

200 阅读7分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

设置MySQL同步

节点的部署方式

Snipaste_2022-12-13_17-26-53.png

Snipaste_2022-12-13_17-27-07.png

Snipaste_2022-12-13_17-26-02.png

安装MySQL

Debian安装MySql

我所使用的linux版本为Debian10系统中默认使用了MariaDB,在APT的软件源中并没有mysql。所以,Debian 10 如果要安装mysql,需要下载安装Mysql APT Repository,更新APT Repository 后再使用 apt-get 安装。

设置软件源 点击mysql下载地址,下载Mysql APT Repository(仅限Debian和ubuntu)

Snipaste_2022-12-12_16-30-18.png

下载完成之后,使用XFTP上传到根目录

Snipaste_2022-12-12_16-31-59.png 输入

sudo apt-get install ./mysql-apt-config_0.8.19-1_all.deb

Snipaste_2022-12-12_16-37-03.png 默认选择了 MySQL 8.0,如果要安装 MySQL 5.7,请选择 MySQL Server & Cluster(当前选择:mysql-8.0),然后选择对应的 MySQL 版本。

使用以下命令更新软件包,并安装MySQL。

sudo apt update
sudo apt install mysql-server

输入root用户的密码

Snipaste_2022-12-12_16-39-22.png

mysql -u root -p

输入密码之后即可进入mysql,到此,Debian安装MySQL完成

Snipaste_2022-12-12_16-40-59.png

配置MySQL远程链接

首先先在云服务器中,打开防火墙/安全组 => 允许3306端口

然后进行配置MySQL

首先,检验云服务器上数据库是否安装成功,输入如下命令进行检验是否安装mysql成功:

sudo netstat -tap | grep mysql

使用Navicat远程服务器mysql数据库时报错误:2013-

根据这个错误提示,这是连接初始化阶段就丢失了连接的错误。 google半天大多是说的注释掉配置文件中 bind-address = 127.0.0.1 这一句。但是我的配置文件并没有配置这一句,各种搜索均也没有解决问题。但是在别人连接成功的配置文件里发现了一个不同的配置语句skip-name-resolve,所以进行了配置。

进入/etc/mysql/mysql.conf.d/,编辑mysqld.cnf文件

vim /etc/mysql/mysql.conf.d/mysqld.cnf

Snipaste_2022-12-12_16-49-28.png

保存之后并重启MySQL服务

/etc/init.d/mysql restart

1045错误解决方案

一般来说是密码忘记了,可以通过以下方法重新设置密码

vim /etc/mysql/mysql.conf.d/mysqld.cnf
  1. 在[Mysqld]下加入 skip-grant-tables
  2. 重启mysql服务
  3. 连接mysql 如出现password可直接回车进入
  4. 进入mysql数据库
  5. 为root授权 grant system_user on . to 'root';
  6. 更新重置密码 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
  7. 刷新数据库 flush privileges;
  8. 退出删除配置中的第一步
  9. 重启mysql服务

在MySQL中配置

连接进入mysql服务 输入这面这条命令连接进入MySql服务:mysql-uroot-p你的密码

在mysql环境下执行授权命令 (授权给远程任何电脑登录数据库): 流程如下:

1)看当前所有数据库:show databases; 2)进入mysql数据库:use mysql; 3)查看mysql数据库中所有的表:show tables; 4)查看user表中的数据:select Host, User from user; 5)修改user表中的Host:update user set Host='%' where User='root'; 6)最后刷新一下:flush privileges;

到此完成远程链接的配置

MySQL(主从复制)集群配置过程

环境: Debian10 mysql5.7

master配置

 1)首先进入到MySQL的配置文件中去

    sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

 2)修改、保存退出  

​
  [mysqld]
  #bind-address=0.0.0.0
  .....
  server-id=11
  log-bin=mysql-bin-11
  binlog-format=row

 3)重启MySQL服务 sudo service mysql restart

slave配置

1)首先进入到MySQL的配置文件中去

   vim /etc/mysql/mysql.conf.d/mysqld.cnf

2)修改、保存退出  

 [mysqld]
  #bind....

  server-id=12
  relay-log=mysql-relay-12

3)重启MySQL服务 sudo service mysql restart

连接

1)在主节点的MySQL终端执行:

  1. 创建新用户:

create user 'username'@'host' identified by 'password'; 其中username为自定义的用户名;host为登录域名,host为'%'时表示为 任意IP,为localhost时表示本机,或者填写指定的IP地址;paasword为密码

  1. 为用户授权:

grant all privileges on . to 'username'@'%' with grant option; 其中 . 第一个表示所有数据库,第二个表示所有数据表,如果不想授权全部那就把对应的*写成相应数据库或者数据表;username为指定的用户;%为该用户登录的域名

  1. 授权之后刷新权限:

flush privileges;

2)查看主节点的二进制文件名和插入位置

    show master status \G

Snipaste_2022-12-13_14-40-44.png

3)在从节点的MySQL终端执行

 change master to 
  master_host='1.0.0.3',(这里最好使用ip,其实写主机的也是可以的,但是一个局域网内主机名很多相同的话,会找不到)
  master_port=3306,
  master_user='frx',
  master_password='123456',
  master_log_file='mysql-bin-11.000001',
  master_log_pos=1326;

 注意:n多个从节点都是相同的配置

4)查看从节点的状态

    show slave status \G

Snipaste_2022-12-13_14-44-13.png

5)开启主从复制

start slave  

Snipaste_2022-12-13_14-43-23.png

至此,即可再主数据库中进行创建数据库,创建表等各种操作,查看从数据库,是否可以同步!

完成主从集群配置

MySQL(主主复制)集群配置过程

其实听名字就可以知道,主主复制其实就是两台服务器互为主节点与从节点。接下来我将详细的给大家介绍,怎么去配置主主复制

 1)在slave节点授权账号  2) 在master节点进行slave配置,将原来的slave当做master进行连接

前提

其实在建立主从关系之前,我们需要保证两点:

1)一是数据库和表的结构是一样的,也就是说主节点中有哪些数据库和表从节点也应该有哪些数据库和表。

    (如果说主节点中有个数据库是从节点中没有的,那当我们删除这个数据库时,从节点没有就会出错了)

2)二是保证主从节点的:数据库主键自增的步长一致,但是自增起始位置位置不一致。

    (一个从1开始自增,则生成的主键为:1,3,5,7,9。另一个从2开始自增,生成的主键为:2,4,6,810)

 如果是双主的话其实没必要设置的,但是如果是主从模式并且主节点和从节点都能插入数据的话,这样从节点插入的数据不能同步到主节点。

   如果主节点再插入ID相同的数据之后在同步到从节点的时候就出错了。

  临时设置:

  主节点的MySQL终端执行:
      set auto_increment_increment=2
      set auto_increment_offset=1
  从节点的MySQL终端执行:
      set auto_increment_increment=2
      set auto_increment_offset=2

    永久设置,如果是重启了MySQL服务还是要重新设置:

  主节点的MySQL终端执行:
      set global auto_increment_increment=2
      set global auto_increment_offset=1
  从节点的MySQL终端执行:
      set global auto_increment_increment=2
      set global auto_increment_offset=2 

配置

Snipaste_2022-12-13_17-16-54.png 在前面的主节点中,加上配置

    在主节点中:

  server-id=11 
  log-bin=mysql-bin-11
  binlog-format=row
  relay-log=mysql-relay-11  

   在从节点中: 

server-id=12
relay-log=mysql-relay-12
log-bin=mysql-bin-12
binlog-format=row

当我们重启服务的时候就可以在/var/lib/mysql下主节点会生成中继日志文件,而从节点就会生成二进制日志文件了。我们还是在配置文件中加上skip-name-resolve把反向域名解析关闭,可以加快运行(只是关闭MySQL的)

连接

在之前的slave节点中 grant replication slave,replication client on . to 'frx'@'%' identified by '123456';

输入 show master status\G 查看File和Position

Snipaste_2022-12-13_17-23-10.png

mysql> change master to master_host="1.12.58.5",master_user='frx',master_password='123456',master_log_file='mysql-relay-12.000001',master_log_pos=1117;

之后 start salve 即可打开同步服务,可输入 show slave status \g 查看

到此完成了主主同步的配置过程

Replication管理和排错

  1)show master status ; 查看master的状态, 尤其是当前的日志及位置   2)show slave status; 查看slave的状态.   3)reset slave ; 重置slave状态,用于删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件.会忘记 主从关系,它删除master.info文件和relay-log.info 文件   4)start slave ; 启动slave 状态(开始监听msater的变化)   5)stop slave; 暂停slave状态;   6)set global sql_slave_skip_counter = n 跳过导致复制终止的n个事件,仅在slave线程没运行的状况下使用

7)reset slave all; 重置slave全部配置

8)mysql_secure_installation 可以进行一些安全设置

Snipaste_2022-12-16_09-49-09.png

问答

问题1 是否可以修改表结构?

答:可以,只要在初始化的时候,表是一致的,链接成立之后,可以修改表结构!

问题2 延迟如何?

答:我使用的两台linux服务器都在深圳,根据 show slave status \G 中 Seconds_Behind_Master: 0

问3 出现配置完master连接主从之后,使用show slave status \G; 出现以下报错

 Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection

Snipaste_2022-12-16_16-12-50.png

答:这是因为我们在创建用户的时候,指定的password plugin不同,可以通过以下命令进行设置

Snipaste_2022-12-16_16-15-56.png

ALTER USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'password';