MySQL 主从原理非常简单,总结一下:
每个从仅可以设置一个主。主在执行 sql 之后,记录二进制 log 文件(bin-log)。从连接主,并从主获取 binlog,存于本地 relay-log,并从上次记住的位置起执行 sql,一旦遇到错误则停止同步。
从这几条 Replication 原理来看,可以有这些推论:
主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间,主从数据不一致。如果主从的网络断开,从会在网络正常后,批量同步。如果对从进行修改数据,那么很可能从在执行主的 bin-log 时出现错误而停止同步,这个是很危险的操作。所以一般情况下,非常小心的修改从上的数据。
一个衍生的配置是双主,互为主从配置,只要双方的修改不冲突,可以工作良好。如果需要多主的话, 可以用环形配置, 这样任意一个节点的修改都可以同步到所有节点。可以应用在读写分离的场景中,用以降低单台 MySQL 服务器的 I/O可以实现 MySQL 服务的 HA 集群
可以是 1 主多从,也可以是相互主从(主主)
说明: 以下文档为在同一个机器上,配置两个 mysql 服务
1.安装、配置 主 MySQL
首先,参考之前步骤搭建 MySQL 服务。为了做实验方便,我们在同一台机器上配置两
个 MySQL 服务(跑两个端口)。
tar zxvf mysql-5.1.72-linux-i686-glibc23.tar.gz 解压
mv mysql-5.1.72-linux-i686-glibc23 /usr/local/mysql 移动
useradd -s /sbin/nologin -M mysql 创建用户
cd /usr/local/mysql 进入程序目录
cp support-files/my-small.cnf /etc/my.cnf 复制配置文件(最小化配置实验用)
cp support-files/mysql.server /etc/init.d/mysqld 复制启动脚本
vim /etc/init.d/mysqld 编辑启动脚本
修改basedir和datadir
basedir=/usr/local/mysql
datadir=/data/mysql
保存退出
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql 初始化数据库目录
有2个OK或者/data/mysql下是否有两个目录,证明初始化正常。
此时可以启动mysql 然后用ps或者netstat来查看程序是否启动
2.安装配置 从 MySQL
cp -r /usr/local/mysql /usr/local/mysql2 复制主程序目录到mysql2
cd /usr/local/mysql2 进入从程序目录
cp /etc/my.cnf /usr/local/mysql2 复制主配置到从目录下
vim /usr/local/mysql2/my.cnf 修改从配置文件
修改[mysqld]下的port和socket,并追加一条datadir 为了不与主冲突
port = 3307
socket = /tmp/mysql2.sock
datadir = /data/mysql2
保存退出
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql2 初始化从数据库
最后可以启动从mysql,但是和主的启动脚本不太一样,需要自己编写启动。
cp /etc/init.d/mysqld /etc/init.d/mysqld2 复制一个启动脚本
修改basedir和datadir并制定my.cnf配置文件路径,与主区别开。
basedir=/usr/local/mysql2
datadir=/data/mysql2
搜索my.cnf并修改路径
conf=$basedir/my.cnf 或者把这一行追加到datadir=/data/mysql2下
保存退出,然后启动从程序
./mysql2 restart
然后ps和netstat来查看是否启动正常
如果想配置第三个mysql,按照从的配置,照葫芦画瓢。
转载于:https://blog.51cto.com/llzdwyp/1699352