MySQL安装
配置
准备两台主机,都安装上mysql。mysql001当做master,mysql002作为slave同步mysql001的数据。
注意:安装mysql时,要在my.cnf中添加或修改server-id,两台mysql的server-id不能相同
主机名 | ip | 类型 | server-id |
---|---|---|---|
mysql001 | 192.168.56.11 | master | 1 |
mysql002 | 192.168.56.12 | slave | 2 |
Master配置
创建复制用户
#关闭master和slave的防火墙,并禁止开机自启。
systemctl stop firewalld.service
systemctl disable firewalld.service
# 进入mysql命令行
bin/mysql -uroot -p123456
#创建一个用于slave复制的用户
grant replication slave on *.* to repluser@'%' identified by '123456';
flush privileges;
#创建复制用户的语法与创建一个普通用户的语法相近,下面一些解释:
# *.*:表示可以检测所有的库下的所有表
# repluser:创建的用户名
# %:所有ip的可以访问
# '123456':密码为 123456
查看master的pos点
#查看master当前的pos点,并记录下载,在slave中配置从指定pos点开始读取
show master status;
# +------------------+----------+--------------+------------------+-------------------+
# | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
# +------------------+----------+--------------+------------------+-------------------+
# | mysql-bin.000007 | 593 | | | |
# +------------------+----------+--------------+------------------+-------------------+
# 1 row in set (0.00 sec)
#这是我的master当前的pos点位置,这个以实际查询出的数据为准。将File 和 Position 记录下来
Slave配置
配置Master信息
# 进入slave的命令行
#配置需要读取的Master信息
change master to
master_host='192.168.56.11',
master_port=3306,
master_user='repluser',
master_password='123456',
master_log_file='mysql-bin.000007',
master_log_pos=593;
# master_host:Master的ip
#master_port:Master的端口
#master_user:复制用户,即:上面Master创建的复制用户
#master_passwor:复制用户的密码
#master_log_file:master当前的binlog文件,即上面Master查询当前pos点时,打印出来的 File 字段内容
#master_log_pos:master当前的binlog文件的pos点,即上面Master查询当前pos点时,打印出来的 Position 字段内容
启动slave
start slave;
验证是否配置成功
show slave status\G;
#查看slave状态,主要查看Slave_IO_Running=yes 和 Slave_SQL_Running=yes 两个字段是否为yes
#两个都为yes即表示配置成功。
#最后可以在Master上执行创建数据库,创建表,插入数据,更新数据,删除数据等操作;每执行一条操作,可以在slave中查询,看数据是否同步过去了
注意
问题1
如果slave的mysql是从Master处拷贝的,则会出现:
Slave_IO_Running=no
Slave_SQL_Running=yes
的情况,查看日志提示server-uuid重复,导致服务同步数据。
解决方案:
在slave的命令行窗口运行:
select uuid();
会打印处一串uuid,拷贝uuid,退出命令行,在找到 mysql的auto.cnf文件(我的这里是在数据文件目录下,即:data/auto.cnf ),打开该文件,用拷贝的uuid替换原来的uuid。重启mysql服务,
进入mysql命令行,启动slave:start slave;
启动后,show slave status;
Slave_IO_Running=yes
Slave_SQL_Running=yes
问题2
在Slave中配置Master的信息时,提示:
File ‘/usr/local/mysql/relay_log/relay-log.index’ not found (Errcode: 2 - No such file or directory)
解决方案: 在/usr/local/mysql/ 目录下创建 relay_log文件夹,不需要创建relay-log.index这个文件,然后重新执行配置命令即可
问题3
Slave_IO_Running: ConnectingSlave_SQL_Running: Yes
原因:Slave无法连接到Master上
解决方案:
1、检查Master的3306端口是否被开放。
2、Master是否允许远程连接。
3、配置信息是否有误,即用户名、密码、ip、port输入有误。