linux下配置mysql主从

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

为了做实验方便,我们在同一台机器上配置两个MySQL服务(开两个端口) 

1、安装、配置MySQL

事先已经安装好mysql;

1
2
3
[root@localhost ~] # cd /usr/local/
[root@localhost  local ] # cp -r mysql/ mysql_2
[root@localhost  local ] # cd mysql_2/

初始化mysql2,如果出现两个 “OK” 并且生成/data/mysql2目录说明正确;

1
[root@localhost mysql_2] # ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql2

拷贝配置文件

1
[root@localhost mysql_2] # cp /etc/my.cnf ./my.cnf

修改配置文件相关参数,更改port 以及 socket ,并增加datadir=/data/mysql2

1
2
3
4
5
[root@localhost mysql_2] # vi my.cnf 
[mysqld]
port            = 3307
socket          =  /tmp/mysql2 .sock
datadir= /data/mysql2


启动:

1
[root@localhost mysql_2] # /usr/local/mysql_2/bin/mysqld_safe --defaults-file=/usr/local/mysql_2/my.cnf --user=mysql &

如果想开机启动,需加入到/etc/rc.local 里;

1
# echo "/usr/local/mysql_2/bin/mysqld_safe --defaults-file=/usr/local/mysql_2/my.cnf --user=mysql &" >> /etc/rc.d/rc.local


netstat查看已经有2个mysqld服务:

1
2
3
4
5
[root@localhost mysql2] # netstat -nlp |grep mysqld
tcp        0      0 0.0.0.0:3306                0.0.0.0:*     LISTEN      1203 /mysqld    
tcp        0      0 0.0.0.0:3307                0.0.0.0:*     LISTEN      1744 /mysqld    
unix  2      [ ACC ]     STREAM     LISTENING     8804   1203 /mysqld    /tmp/mysql .sock
unix  2      [ ACC ]     STREAM     LISTENING     14159  1744 /mysqld    /tmp/mysql2 .sock


2、 配置主从准备工作

设定mysql_2 为主(master)端口3307,mysql为从(slave)端口为3306 

使用sock文件登录主mysql

1
[root@localhost mysql2] # /usr/local/mysql_2/bin/mysql -uroot -S /tmp/mysql2.sock

-S 后面指定mysql的socket文件路径,这也是登陆mysql的一种方法,因为在一台服务器上跑了两个mysql端口,所以,只能用 -S 这样的方法来区分。

在主上创建测试库db1

1
2
mysql> create database db1;
mysql> quit

导出主的mysql库数据然后导入给db1

1
2
[root@localhost mysql2] # /usr/local/mysql_2/bin/mysqldump -uroot -S /tmp/mysql2.sock mysql > 123.sql
[root@localhost mysql2] # /usr/local/mysql_2/bin/mysql -uroot -S /tmp/mysql2.sock db1 < 123.sql


3、配置主(master)

vim /usr/local/mysql_2/my.cnf

在[mysqld]部分查看是否有以下内容,如果没有则添加:

server-id=1

log-bin=mysql-bin  

两个可选参数(2选1):

binlog-do-db=db1,db2 #需要同步的库

binlog-ignore-db=db1,db2 #忽略不同步的库

binlog-do-db=需要复制的数据库名,多个数据库名,使用逗号分隔。binlog-ignore-db=不需要复制的数据库库名,多个数据库名,使用逗号分隔。

修改配置文件后,重启mysql_2

1
2
[root@localhost mysql2] # pid=`ps aux |grep mysql2.sock |grep -v grep |awk '{print $2}'`[root@localhost mysql2]# kill $pid
[root@localhost mysql_2] # /usr/local/mysql_2/bin/mysqld_safe --defaults-file=/usr/local/mysql_2/my.cnf --user=mysql &

设置root密码:

1
2
[root@localhost mysql2] # /usr/local/mysql_2/bin/mysqladmin -uroot -S /tmp/mysql2.sock password '123456'
[root@localhost mysql2] # /usr/local/mysql_2/bin/mysql -uroot -S /tmp/mysql2.sock -p123456

mysql> grant replication slave on *.* to 'repl'@'127.0.0.1' identified by '123123';

//这里的repl是为slave端设置的访问master端mysql数据的用户,密码为123123,这里的127.0.0.1为slave的ip(本次试验配置的master和slave都在本机)。

mysql> flush privileges;    //刷新库,内存的数据写入磁盘;

mysql> flush tables with read lock;

//锁定数据库,此时不允许更改任何数据

1
2
3
4
5
6
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |      378 |              |                  |
+------------------+----------+--------------+------------------+
//查看状态,这些数据是要记录的,一会要在slave端用到;

4、 设置从(slave)

vim /etc/my.cnf  #修改或增加

server-id = 2 #这个数值不能和主一样

可选参数:replicate-do-db=db1,db2 

replicate-ignore-db=db1,db2 #意义同主的那两个可选参数

重启从的mysql服务:service mysqld restart

拷贝主的db1库数据到从:

先导出db1.sql文件,然后在从数据库中同样创建数据库db1,导入主的db1.sql文件到从;

1
2
3
[root@localhost ~] # /usr/local/mysql_2/bin/mysqldump -uroot -S /tmp/mysql2.sock -p123456 db1 > db1.sql
[root@localhost ~] # /usr/local/mysql/bin/mysql -uroot -S /tmp/mysql.sock -e "create database db1"
[root@localhost ~] # /usr/local/mysql/bin/mysql -uroot -S /tmp/mysql.sock db1 < db1.sql

登陆从的mysql

1
2
3
[root@localhost ~] # /usr/local/mysql/bin/mysql -uroot -S /tmp/mysql.sock 
mysql> slave stop;
mysql> change master to master_host= '127.0.0.1' ,master_port=3307,master_user= 'repl' ,master_password= '123123' ,master_log_file= 'mysql-bin.000004' ,master_log_pos=378;

//master_log_file='mysql-bin.000004',master_log_pos=378为主show master status显示的前2列内容;

1
mysql> slave start;


主上,解锁表: 

1
[root@localhost ~] # /usr/local/mysql_2/bin/mysql -uroot -S /tmp/mysql2.sock -p123456 -e "unlock tables"

登录从

1
[root@localhost ~] # /usr/local/mysql/bin/mysql -uroot -S /tmp/mysql.sock

查看从的状态 show slave status\G;

确认以下两项参数都为yes:

Slave_IO_Running: Yes 

Slave_SQL_Running: Yes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
mysql> show slave status\G;
*************************** 1. row ***************************
                Slave_IO_State: Waiting  for  master to send event
                   Master_Host: 127.0.0.1
                   Master_User: repl
                   Master_Port: 3307
                 Connect_Retry: 60
               Master_Log_File: mysql-bin.000004
           Read_Master_Log_Pos: 378
                Relay_Log_File: localhost-relay-bin.000002
                 Relay_Log_Pos: 251
         Relay_Master_Log_File: mysql-bin.000004
              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: 0
                    Last_Error:
                  Skip_Counter: 0
           Exec_Master_Log_Pos: 378
               Relay_Log_Space: 410
               Until_Condition: None
                Until_Log_File:
                 Until_Log_Pos: 0
            Master_SSL_Allowed: No
            Master_SSL_CA_File:
            Master_SSL_CA_Path:
               Master_SSL_Cert:
             Master_SSL_Cipher:
                Master_SSL_Key:
         Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                 Last_IO_Errno: 0
                 Last_IO_Error:
                Last_SQL_Errno: 0
                Last_SQL_Error:


5、 测试主从

主上清空db1库的db表 :

登录主

1
2
3
4
5
6
7
8
[root@localhost ~] # mysql -uroot -S /tmp/mysql2.sock -p123456
mysql> use db1;
mysql>  select  count(*) from db;
+----------+
| count(*) |
+----------+
|        2 |
+----------+

清空db表;

1
2
3
4
5
6
7
mysql> truncate table db;
mysql>  select  count(*) from db; 
+----------+
| count(*) |
+----------+
|        0 |
+----------+

进入slave,查看db1库db表,和主的数据一样,表示同步OK;

1
2
3
4
5
6
7
8
[root@localhost ~] # mysql -uroot -S /tmp/mysql.sock 
mysql> use db1;
mysql>  select  count(*) from db;
+----------+
| count(*) |
+----------+
|        0 |
+----------+

登录主,删除表db;

1
2
[root@localhost ~] # mysql -uroot -S /tmp/mysql2.sock -p123456
mysql> drop table db;

登录从,查看db表不存在;

1
2
3
[root@localhost ~] # mysql -uroot -S /tmp/mysql.sock 
mysql>  select  * from db;
ERROR 1146 (42S02): Table  'db1.db'  doesn't exist


建议: MySQL主从机制比较脆弱,谨慎操作。如果重启master,务必要先把slave停掉,也就是说需要在slave上去执行 slave stop 命令,然后再去重启master的mysql服务,否则很有可能就会中断了。当然重启完后,还需要把slave给开启 slave start。






本文转自 模范生 51CTO博客,原文链接:http://blog.51cto.com/mofansheng/1655877,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
18
分享
相关文章
在Rocky Linux 9上安装JDK并配置环境变量!
本教程介绍在Rocky Linux 9上安装JDK并配置环境变量的完整步骤。首先更新系统,清理旧版本JDK相关包及残留文件,确保环境干净。接着搜索并安装所需版本的JDK(如OpenJDK 17),验证安装是否成功。然后查找JDK安装路径,配置全局环境变量`JAVA_HOME`和`PATH`,最后验证环境变量设置。按照此流程操作,可顺利完成Java开发环境搭建,支持多版本切换(如JDK 8/11/17)。生产环境请谨慎操作,避免影响现有服务。
38 21
seatunnel配置mysql2hive
本文介绍了SeaTunnel的安装与使用教程,涵盖从安装、配置到数据同步的全过程。主要内容包括: 1. **SeaTunnel安装**:详细描述了下载、解压及配置连接器等步骤。 2. **模拟数据到Hive (fake2hive)**:通过编辑测试脚本,将模拟数据写入Hive表。 3. **MySQL到控制台 (mysql2console)**:创建配置文件并执行命令,将MySQL数据输出到控制台。 4. **MySQL到Hive (mysql2hive)**:创建Hive表,配置并启动同步任务,支持单表和多表同步。
89 15
|
26天前
|
问题记录:解决Linux登录故障,/etc/passwd配置受损该怎么操作
修复/etc/passwd文件是解决Linux登录故障的重要步骤。通过进入单用户模式、挂载文件系统、恢复或手动修复/etc/passwd文件,可以有效解决该问题。保持定期备份系统配置文件是预防此类问题的最佳实践。
49 5
|
27天前
|
问题记录:解决Linux登录故障,/etc/passwd配置受损该怎么操作
修复/etc/passwd文件是解决Linux登录故障的重要步骤。通过进入单用户模式、挂载文件系统、恢复或手动修复/etc/passwd文件,可以有效解决该问题。保持定期备份系统配置文件是预防此类问题的最佳实践。
53 13
Linux下mysql数据库的导入与导出以及查看端口
本文详细介绍了在Linux下如何导入和导出MySQL数据库,以及查看MySQL运行端口的方法。通过这些操作,用户可以轻松进行数据库的备份与恢复,以及确认MySQL服务的运行状态和端口。掌握这些技能,对于日常数据库管理和维护非常重要。
170 8
|
3月前
|
Linux网络文件系统NFS:配置与管理指南
NFS 是 Linux 系统中常用的网络文件系统协议,通过配置和管理 NFS,可以实现跨网络的文件共享。本文详细介绍了 NFS 的安装、配置、管理和常见问题的解决方法,希望对您的工作有所帮助。通过正确配置和优化 NFS,可以显著提高文件共享的效率和安全性。
343 7
Linux安装jdk、mysql、redis
Linux安装jdk、mysql、redis
266 7
MySQL数据库下载安装教程(Windows&Linux)
本文档详细介绍了MySQL的安装步骤,包括安装前的准备工作、下载安装包、Windows和Linux系统下的具体安装流程,以及如何配置MySQL服务、设置环境变量、启动服务和连接数据库等关键操作。
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
MySQL生产环境迁移至YashanDB数据库深度体验
这篇文章是作者将 MySQL 生产环境迁移至 YashanDB 数据库的深度体验。介绍了 YashanDB 迁移平台 YMP 的产品相关信息、安装步骤、迁移中遇到的各种兼容问题及解决方案,最后总结了迁移体验,包括工具部署和操作特点,也指出功能有优化空间及暂不支持的部分,期待其不断优化。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等