共计 2067 个字符,预计需要花费 6 分钟才能阅读完成。
因为这两天业务需求不是很多,昨天抽空研究了下 MySQL 的主从同步。期间也遇到了许多问题,怕之后会忘记,也顺便记录下自己的成长经历。所以写这篇文章。
因为我是在 VMWare 虚拟机的 Ubuntu 16.04 上进行的测试。所以首先要把虚拟机的链接模式改为桥接模式。
在设置 -> 硬件 -> 网络适配器 -> 网络连接里更改为桥接模式。
如果不是使用 root 用户登录,建议 sudo su 切换到 Root 用户安装,那就不用老是 sudo 了。
然后设置 IP 为静态 IP,在终端里输入
vi /etc/network/interfaces
打开之后修改文件,增加下列代码。
#interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto ens33
iface ens33 inet static
address 192.168.6.119
netmask 255.255.255.0
gateway 192.168.6.2
#dns-nameserver 119.29.29.29
ens33 是通过 ifconfig 命令进行查询的,每个人可能不一样。有人可能是 eth0 或者其他。这点千万不要弄错否则会连不上网络。
分别对主和从服务器进行上述操作,我的主服务器 IP 是 192.168.6.119,从是 192.168.6.200。
Ubuntu 也可以通过图形界面的设置来设置静态 IP。
分别重启主从服务器的网卡。
查看能否互相 ping 通对方。
然后依次下载安装 MySQL。在线安装还是很方便的。
apt-get install mysql-server
apt-get isntall mysql-client
在主从的终端分别里输入
vi /etc/mysql/mysql.conf.d/mysqld.cnf
打开配置文件,在 [mysqld] 模块里注释掉 bind-address,用来允许远程访问数据库。
并在主服务器的 [mysqld] 模块里添加以下代码。
server-id = 1 #server-id 服务器唯一标识
log_bin = master-bin #log_bin 启动 MySQL 二进制日志
log_bin_index = master-bin.index
binlog_do_db = myslave #binlog_do_db 指定记录二进制日志的数据库
binlog_ignore_db = mysql #binlog_ignore_db 指定不记录二进制日志的数据库
在从服务器的数据库配置文件里加入以下代码
server-id = 2
replicate-do-db =myslave
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index
下一步在 MySQL 命令行里更改登录主服务器 MySQL 创建从服务器用到的账户和权限
grant replication slave,reload,super on *.* to slave @192.168.6.200 identified by 'mypassword'
分别重启主从 MySQL 服务。
service mysql restart
登录主服务器的 MySQL 数据库,查看主数据库状态
show master status;
记住查询出来的 file_set 和 Position 字段的值,后面会用到。
在从服务器的数据库命令行里输入下列代码,用来登录 Slave 从服务器,连接 Master 主服务器
change master to master_host='192.168.6.199',master_port=3306,master_user='mydatabase',master_password='mypassword',master_log_file='master-bin.000003',master_log_pos=1698;
(master_host 对应主服务器的 IP 地址,master_port 对应主服务器的端口,master_log_file 对应 show master status 显示的 File 列:master-bin.000003,master_log_pos 对应 Position 列:1698,否则有可能出现同步失败。)
在登录 slave 服务器 MySQL 的状态下启动数据同步
start slave;
登录 slave 服务器 MySQL 的状态下查看同步状态
show slave status\G;
上面两个都为 Yes 的时候为同步成功,如果 Slave_IO_Running 为 connecting 时可能是用来登录 Slave 从服务器,连接 Master 主服务器里面的密码或者用户名输入错误,
或者是网络连接不成功,看看虚拟机的 IP 地址是否是你设置的 IP。
现在你在 Master 数据库有任何的 insert,delete,update 操作都会被及时的更新到 Slave 数据库上。
在 slave 数据库上停止同步命令
stop slave;
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-08/146624.htm