GVKun编程网logo

linux 配置 mysql 主从复制(搭建mysql主从复制)

4

针对linux配置mysql主从复制和搭建mysql主从复制这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展centos7mysql多实例安装主从复制、dockermysql主从复制、Doc

针对linux 配置 mysql 主从复制搭建mysql主从复制这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展centos7 mysql 多实例安装 主从复制、docker mysql 主从复制、Docker 搭建 MySQL 主从复制、Linux - centos7 下 MySQL (mariadb) 和 主从复制等相关知识,希望可以帮助到你。

本文目录一览:

linux 配置 mysql 主从复制(搭建mysql主从复制)

linux 配置 mysql 主从复制(搭建mysql主从复制)

1. 准备工作,2 台服务器都安装最好一个版本的 mysql

  主:192.168.100.1

  从:192.168.100.2

  a. 修改主数据库 /etc/my.cnf,mysqld 下添加。修改之后重启。

    [mysqld]

    server-id=1

    log-bin=mysqlmaster-bin.log

  b. 修改从数据库 /etc/my.cnf,mysqld 下添加。修改之后重启

    [mysqld]

    server-id=2

    log-bin=mysqlmaster-bin.log

2. 主库操作

    ①主库创建用于主从复制的账户

    mysql>create user sync@''192.168.100.2'' identified by ''sync'';

    mysql>grant replication slave on *.* to sync@''192.168.100.2'';

    # 注意 192.168.100.2 为从库的 ip 地址,需要换成实际的。我设置的主从账户和密码都为 sync,可以更换。

   ②. 主库锁表,禁止再插入数据以获取主数据库二进制日志坐标。

    mysql>flush tables with read lock;

   ③新开一个会话窗口,进入 mysql 库,执行

  mysql> show master status;
   mysql> SHOW MASTER STATUS; 
   +------------------------+----------+--------------+------------------+-------------------+ 
   | File                   | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | 
   +------------------------+----------+--------------+------------------+-------------------+ 
   | mysqlmaster-bin.000001 |      500 |              |                  |                   | 
   +------------------------+----------+--------------+------------------+-------------------+ 
   1 row in set (0.00 sec) 
  #记录file和position,稍后需要在从库配置

   ④主服务器使用 mysqldump 命令创建数据快照

  mysqldump -uroot -p -h127.0.0.1 -P3306 --all-databases  --triggers --routines --events >/data/all.sql

    ⑤主库解锁

  mysql> unlock tables;

3. 从库服务器操作

mysql -uroot -p -h127.0.0.1 -P3306 < all.sql 
# mysql -uroot -p 
mysql> CHANGE MASTER TO MASTER_HOST=''192.168.100.1'',MASTER_USER=''sync'',MASTER_PASSWORD=''sync'',MASTER_LOG_FILE=''mysqlmaster-bin.000001'',MASTER_LOG_POS=500; 
# 然后启动从数据库的复制线程: 
mysql> start slave; 
# 查询数据库的slave状态: 
mysql>  show slave status \G 
# 下面两个参数都是Yes,说明主从配置成功! 
Slave_IO_Running: Yes 
Slave_SQL_Running: Yes

4. 测试,从主库创建数据库和增删改查,然后到从库去查看。

------------------------------------------end------------------------------------------------

#如果要清除主从配置,需要进入从库执行 2 条命令;

stop slave;
reset slave all;

centos7 mysql 多实例安装 主从复制

centos7 mysql 多实例安装 主从复制

  • 将/etc/selinux/config里的SELINUX设置成:disabled
  • 解压mysql
  • 创建mysql实例用户及文件
  • 配置Mysql的配置文件/etc/my.cnf
  • [mysqld_multi]
    mysqld = /home/mysql/mysql/bin/mysqld
    mysqladmin = /home/mysql/mysql/bin/mysqladmin
    log = /tmp/mysql_multi.log
    
    [mysqld1]
    datadir = /home/mysql/data3306
    socket = /tmp/mysql.sock1
    port = 3306
    user = mysql
    performance_schema = off
    innodb_buffer_pool_size = 32M
    bind_address = 0.0.0.0
    skip-name-resolve = 0
    log-bin=mysql-bin
    binlog_format=mixed
    server-id=1
    
    [mysqld2]
    datadir = /home/mysql/data3307
    socket = /tmp/mysql.sock2
    port = 3307
    user = mysql
    performance_schema = off
    innodb_buffer_pool_size = 32M
    bind_address = 0.0.0.0
    skip-name-resolve = 0
    log-bin=mysql-bin
    binlog_format=mixed
    server-id=2
    
    [mysqld3]
    datadir = /home/mysql/data3308
    socket = /tmp/mysql.sock3
    port = 3308
    user = mysql
    performance_schema = off
    innodb_buffer_pool_size = 32M
    bind_address = 0.0.0.0
    skip-name-resolve = 0
    log-bin=mysql-bin
    binlog_format=mixed
    server-id=3
    

     

 

  • 主从复制:
    master:
    GRANT replication slave ON *.* TO ''bhis''@''%'' IDENTIFIED BY ''bhis'';
    show master status;
    
    
    salve:
    mysql> CHANGE MASTER TO
        -> MASTER_HOST="192.168.135.129",
        -> MASTER_USER="bhis",
        -> MASTER_PASSWORD="bhis",
        -> MASTER_LOG_FILE="mysql-bin.000001",
        -> MASTER_LOG_POS=437;
    
    start slave;
    show slave status;

     

详情请看这位大神的 

docker mysql 主从复制

docker mysql 主从复制

测试环境:linux、docker,可以参考在 linux 环境安装 docker 可以参考

  • 什么是主从复制??

主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从数据库上,然后在从数据库上对这些日志进行重新执行,从而使从数据库和主数据库的数据保持一致。
  • 主从复制的原理

1. MySql主库在事务提交时会把数据变更作为事件记录在二进制日志Binlog中;
2. 主库推送二进制日志文件Binlog中的事件到从库的中继日志Relay Log中,
之后从库根据中继日志重做数据变更操作,通过逻辑复制来达到主库和从库的数据一致性;
3. MySql通过三个线程来完成主从库间的数据复制,其中Binlog Dump线程跑在主库上,
I/O线程和SQL线程跑着从库上;
4. 当在从库上启动复制时,首先创建I/O线程连接主库,主库随后创建Binlog Dump线程
读取数据库事件并发送给I/O线程,I/O线程获取到事件数据后更新到从库的中继日志Relay Log中去,
之后从库上的SQL线程读取中继日志Relay Log中更新的数据库事件并应用

  • 下面来实操,先配置主库:

docker run -p 3307:3306 --name=mysql-master --privileged=true \
-v /data/mysql-master/log:/var/log/mysql \
-v /data/mysql-master/data:/var/lib/mysql \
-v /data/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7
  • 进入 mysql 的配置文件夹 /data/mysql-master/conf 中创建一个配置文件 my.cnf
touch my.cnf
  • 然后在 my.cnf 添加以下内容:
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101 
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能
log-bin=mall-mysql-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
  • 修改完配置后重启实例
docker restart mysql-master
  • 进入mysql-master容器中
docker exec -it mysql-master /bin/bash
  • 进入 mysql,然后配置用户和授权
1. mysql -uroot -p 执行完,输入密码
2. CREATE USER ''slave''@''%'' IDENTIFIED BY ''123456'';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ''slave''@''%'';

以上主库已经完成。

下面配置从库:

  • 创建从库容器
docker run -p 3308:3306 --name=mysql-slave --privileged=true \
-v /data/mysql-slave/log:/var/log/mysql \
-v /data/mysql-slave/data:/var/lib/mysql \
-v /data/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7
  • 在 mysql 的配置文件夹 /data/mysql-slave/conf 中创建一个配置文件 my.cnf
touch my.cnf
  • 修改配置文件 my.cnf
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1
  • 修改完配置后重启实例:
docker restart mysql-slave

将主从数据库进行连接

  • 连接到主数据库的 mysql 客户端,查看主数据库状态:
show master status

 

第一个红圈是同步的文件,第二个是同步到位置点

  • 进入 mysql-slave 容器中:
docker exec -it mysql-slave /bin/bash
  • 在容器中使用 mysql 的登录命令连接到客户端:
mysql -uroot -p
  • 在从数据库中配置主从复制:
change master to master_host=''192.168.6.132'', master_user=''slave'', master_password=''123456'', master_port=3307, master_log_file=''mall-mysql-bin.000001'', master_log_pos=617, master_connect_retry=30;  
  • 主从复制命令参数说明:

    • master_host:主数据库的 IP 地址;
    • master_port:主数据库的运行端口;
    • master_user:在主数据库创建的用于同步数据的用户账号;
    • master_password:在主数据库创建的用于同步数据的用户密码;
    • master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取 File 参数;
    • master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取 Position 参数;
    • master_connect_retry:连接失败重试的时间间隔,单位为秒。
  • 查看主从同步状态:

show slave status \G;Copy to clipboardErrorCopied
  • 从数据库状态显示如下:

 

  • 开启主从同步:
start slave;

主从复制测试

主从复制的测试方法有很多,可以在主实例中创建一个数据库,看看从实例中是否有该数据库,如果有,表示主从复制已经搭建成功。

  • 在主实例中创建一个数据库 mall

  • 在从实例中查看数据库,发现也有一个 mall 数据库,可以判断主从复制已经搭建成功。

到这里,画一个完美的符号。

这期间碰到几个问题:

1. docker 安装 mysql 容器的时候出现问题:docker 安装 mysql chown: changing ownership of ''/var/lib/mysql/'': Permission denied

2. 主从同步出现一下错误:

Slave_IO_Running: Connecting
Slave_SQL_Running: Yes

解决方法:导致 lave_IO_Running 为 connecting 的原因主要有以下 3 个方面:

1、网络不通
2、密码不对
3、pos 不对

主要参考于:http://www.macrozheng.com/#/reference/mysql_master_slave?id=%e4%bb%80%e4%b9%88%e6%98%af%e4%b8%bb%e4%bb%8e%e5%a4%8d%e5%88%b6%ef%bc%9f

Docker 搭建 MySQL 主从复制

Docker 搭建 MySQL 主从复制

1、运行两个 MySQL 容器:

# mysql-master
docker run -d --name mysql-master -v /home/soft/mysql/mster:/var/lib/mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.28

# mysql-slave
docker run -d --name mysql-slave -v /home/soft/mysql/slave:/var/lib/mysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 --link mysql-master mysql:5.7.28

2、进入主容器:

docker exec -it mysql-master bash
安装 vim:
apt-get update & apt-get install vim

编辑配置文件:

vi /etc/mysql/my.cnf

在最后添加

[mysqld] 
# 同一局域网内注意要唯一 
server-id=1 
# 开启二进制日志功能 
log-bin=mysql-master-bin
保存,退出容器,重启 mysql-master:
docker restart mysql-master

3、进入从容器:

docker exec -it mysql-slave bash
安装 vim:
apt-get update & apt-get install vim

编辑配置文件:

vi /etc/mysql/my.cnf

在最后添加

[mysqld] 
# 同一局域网内注意要唯一 
server-id=2
保存,退出容器,重启 mysql-slave:
docker restart mysql-slave

4、进入主容器:

docker exec -it mysql-master mysql -u root -p

创建用户并赋予复制权限:

GRANT replication slave ON *.* TO ''slave''@''%'' IDENTIFIED BY ''123456'';
执行命令查看二进制文件信息:
show master status
+-------------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| mysql-master-bin.000001 | 609 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set
记录 File、Position 两个字段值

5、进入从容器:

docker exec -it mysql-slave mysql -u root -p

执行命令停止 slave:

stop slave;

执行命令切换主从复制配置:

change master to master_host=''mysql-master'',master_user=''slave'',master_password=''123456'',master_log_file=''mysql_master_bin.000001'',master_log_pos=609;

执行命令启动 slave:

start slave;

查看配置状态:

+----------------------------------+-------------+-------------+-------------+---------------+-------------------+---------------------+-------------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+-----------------------------+------------------+--------------------------------------+----------------------------+-----------+---------------------+--------------------------------------------------------+--------------------+-------------+-------------------------+--------------------------+----------------+--------------------+--------------------+-------------------+---------------+----------------------+--------------+--------------------+
| Slave_IO_State | Master_Host | Master_User | Master_Port | Connect_Retry | Master_Log_File | Read_Master_Log_Pos | Relay_Log_File | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | 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 | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | 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 | Last_IO_Errno | Last_IO_Error | Last_SQL_Errno | Last_SQL_Error | Replicate_Ignore_Server_Ids | Master_Server_Id | Master_UUID | Master_Info_File | SQL_Delay | SQL_Remaining_Delay | Slave_SQL_Running_State | Master_Retry_Count | Master_Bind | Last_IO_Error_Timestamp | Last_SQL_Error_Timestamp | Master_SSL_Crl | Master_SSL_Crlpath | Retrieved_Gtid_Set | Executed_Gtid_Set | Auto_Position | Replicate_Rewrite_DB | Channel_Name | Master_TLS_Version |
+----------------------------------+-------------+-------------+-------------+---------------+-------------------+---------------------+-------------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+-----------------------------+------------------+--------------------------------------+----------------------------+-----------+---------------------+--------------------------------------------------------+--------------------+-------------+-------------------------+--------------------------+----------------+--------------------+--------------------+-------------------+---------------+----------------------+--------------+--------------------+
| Waiting for master to send event | mysql1 | slave | 3306 | 60 | mysql1-bin.000001 | 609 | 59e0b81b9fbb-relay-bin.000002 | 321 | mysql1-bin.000001 | Yes | Yes | | | | | | | 0 | | 0 | 609 | 535 | None | | 0 | No | | | | | | 0 | No | 0 | | 0 | | | 1 | 1625200d-3672-11ea-ae5f-0242ac110002 | /var/lib/mysql/master.info | 0 | NULL | Slave has read all relay log; waiting for more updates | 86400 | | | | | | | | 0 | | | |
+----------------------------------+-------------+-------------+-------------+---------------+-------------------+---------------------+-------------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+-----------------------------+------------------+--------------------------------------+----------------------------+-----------+---------------------+--------------------------------------------------------+--------------------+-------------+-------------------------+--------------------------+----------------+--------------------+--------------------+-------------------+---------------+----------------------+--------------+--------------------+
1 row in set

6、验证:

连接主数据库,新建数据库表或插入数据;查看从数据库是否自动创建,验证主从复制是否成功;
 
 
 

Linux - centos7 下 MySQL (mariadb) 和 主从复制

Linux - centos7 下 MySQL (mariadb) 和 主从复制

[TOC]

Linux - centos7 下 MySQL (mariadb) 和 主从复制

MySQL(mariadb)

MariaDB 数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可。

开发这个分支的原因之一是:甲骨文公司收购了 MySQL 后,有将 MySQL 闭源的潜在风险,因此社区采用分支的方式来避开这个风险。

MariaDB 的目的是完全兼容 MySQL,包括 API 和命令行,使之能轻松成为 MySQL 的代替品。

安装 MySQL (mariadb)

1. 在线下载阿里云的 yum 仓库,以及 epel 仓库

	CentOS-Base.repo  epel.repo

2. 安装 mysql 的方式

	yum install mysql-server  mysql -y  

3. 安装 mysql 的方式也有 2 种,阿里云官方提供的 mariadb 软件包,版本可能太低,但是下载网速很快,方便学习使用

4. 在企业里面,多半不会使用阿里云的 mariadb 版本,因为版本太低,安全性太低,公司会配置 myariadb 官方的 yum 仓库

1.手动创建mariadb的仓库文件
	touch Mariadb.repo
2.写入配置信息
	[mariadb]
	name = MariaDB
	baseurl = http://yum.mariadb.org/10.1/centos7-amd64
	gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
	gpgcheck=1
3.尝试安装最新版本mariadb
	yum install mariadb-server mariadb

5. 使用 mysql,启动

systemctl start mariadb 

6. 初始化数据库

mysql_secure_installation

配置数据库的中文支持

1.修改mysql的配置文件,支持中文编码

cat /etc/my.cnf  和我一致就行 
	[mysqld]
	character-set-server=utf8
	collation-server=utf8_general_ci
	log-error=/var/log/mysqld.log
	datadir=/var/lib/mysql
	socket=/var/lib/mysql/mysql.sock
	# Disabling symbolic-links is recommended to prevent assorted security risks
	symbolic-links=0
	# Settings user and group are ignored when systemd is used.
	# If you need to run mysqld under a different user or group,
	# customize your systemd unit file for mariadb according to the
	# instructions in http://fedoraproject.org/wiki/Systemd

	[client]
	default-character-set=utf8

	[mysql]
	default-character-set=utf8

2.在服务器上,修改了配置文件,都要重启数据库服务
systemctl restart mariadb 

3.在utf8编码下,配置mariadb
	show create table stu;
	create table stu(id int,name char(10));
	insert into stu(id,name) values(1,"小王");
	show create database s16;

在远程用 mysql 客户端去连接服务端,方式有哪些

1.navicat
2.cmd  
	mysql  -uroot -p  -h 192.168.15.53
3.pycharm 
4.pymysql  python
5.orm  django

配置 mysql 支持远程连接的 sql 语句

授权mariadb远程连接
#授予root用户对所有的库表所有的权限,在所有的机器上操作,皆可登录
# 此时是退出mysql数据库在外面执行的
grant all privileges on *.* to root@''%'' identified by ''centos'';(密码)
grant all privileges on *.* to root@''%'' identified by ''root'';

刷新授权表:
flush privileges;

数据库备份与恢复

mysqldump 命令用于备份数据库数据

mysqldump -u root -p --all-databases > /tmp/db.dump
数据导入,方式有2种
1.mysql -uroot -p  <  /tmp/db.dump 
2.进入mysql命令行,输入source /tmp/db.dump 
systemctl stop firewalld
systemctl disable firewalld

进入 mariadb 数据库,删除一个 db

[root@master ~]# mysql -uroot -p

MariaDB [(none)]> drop database s11; 进行数据恢复,吧刚才重定向备份的数据库文件导入到 mysql 中

[root@master ~]# mysql -uroot -p < /tmp/db.dump

MYSQL 主从复制

MySQL 数据库的主从复制方案,是其自带的功能,并且主从复制并不是复制磁盘上的数据库文件,而是通过 binlog 日志复制到需要同步的从服务器上。

MySQL 数据库支持单向、双向、链式级联,等不同业务场景的复制。在复制的过程中,一台服务器充当主服务器(Master),接收来自用户的内容更新,而一个或多个其他的服务器充当从服务器(slave),接收来自 Master 上 binlog 文件的日志内容,解析出 SQL,重新更新到 Slave,使得主从服务器数据达到一致。

主从复制的逻辑有以下几种

  • 一主一从,单向主从同步模式,只能在 Master 端写入数据
  • 一主多从
  • 主主复制逻辑架构,此架构可以在 Master1 或 Master2 进行数据写入,或者两端同事写入(特殊设置,互为主从)

主从机制实现原理:

(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events); 
(2) slave将master的binary log events拷贝到它的中继日志(relay log); 
(3) slave重做中继日志中的事件,将改变反映它自己的数据。

master 主库配置

1. 环境准备,准备 2 台机器,一个 master 一个 slave

	192.168.15.53  主库 

	192.168.15.94  从库

2. 配置主库的环境

1.修改主库的配置文件,开启binlog功能
	vim /etc/my.cnf
	[mysqld]
	server-id=1
	log-bin=s16-mysql-bin

2.重启数据库
systemctl restart mariadb

3. 创建用于数据同步的账号

create user ''banzhang''@''%'' identified by ''bz666'';

4. 授予这个账号,一个 slave 的身份标识

grant replication slave on *.* to ''banzhang''@''%'';

5. 锁表

flush table with read lock;

6. 数据库信息导出

mysqldump -uroot -p   --all-databases  >  /opt/db.dump  

scp /opt/db.dump root@192.168.15.122:/opt/

mariadb 从库的操作

1. 阿里云的源,和官方源,同一安装软件包名如下

yum install mariadb-server mariadb -y 

2. 配置从库的配置文件,开启 server-id

vim /etc/my.cnf 

写入如下操作
[mysqld]
server-id=3
read-only=true

character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log

3. 重启数据库

systemctl restart mariadb 

4. 在从库,通过一条命令,开启主从同步

进入数据库
mysql > change master to master_host=''192.168.15.91'',
master_user=''banzhang'',
master_password=''bz666'',
master_log_file=''s16-mysql-bin.000002'',  这个和下面的参数要和主库的状态一致   即show master status; 查看这两个参数的数值
master_log_pos=331;

5. 开启 slave 同步

start slave; 

6. 检查主从同步状态

show slave status\G 
当你检查这2条参数,yes的时候,主从ok

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

此时解锁主库!!

此时解锁主库!! unlock tables

此时解锁主库!!

验证主从同步是否正常

检查主从复制是否成功的关键在于

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.119.10
                  Master_User: chaoge
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 1039
               Relay_Log_File: slave-relay-bin.000002
                Relay_Log_Pos: 537
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

tip:

注意此处还未配置从库的只读模式,只需在 slave 服务器上配置 /etc/my.cnf,加上以下配置,并且在 slave 上创建普通用户,使用普通用户主从同步即可达到只读的效果

如果用 root 用户,无法达到 readonly,这是一个坑

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log
server-id=3
read-only=true
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

我们今天的关于linux 配置 mysql 主从复制搭建mysql主从复制的分享已经告一段落,感谢您的关注,如果您想了解更多关于centos7 mysql 多实例安装 主从复制、docker mysql 主从复制、Docker 搭建 MySQL 主从复制、Linux - centos7 下 MySQL (mariadb) 和 主从复制的相关信息,请在本站查询。

本文标签: