查看服务器A是否已经安装Mysql数据库。
[root@chenllcentos ~]# rpm -aq | grep mysql
若无消息显示,则进行Mysql安装。这里跳过安装;
同样的,对服务器B和服务器C安装Mysql数据库,此处略去。接下来,开始进行数据库主从复制的配置。
1.主数据库配置
修改主数据库配置文件my.cnf。
[root@chenllcentos ~]# vi /etc/my.cnf
新增如下标注内容:
[mysqld]
max_connections=1000
binlog-ignore-db=mysql #新增
binlog-ignore-db=information_schema #新增
log-bin=mysql-bin #新增
server-id=1 #新增
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
关于新增的几项配置,其中
binlog-ignore-db 用来指定忽略同步的数据库,未指定的默认都进行主从复制。
log-bin 指定数据库操作日志,主从复制的过程本质就是从数据库在主数据库读取该日志,并且再执行一次。
server-id 只要满足在数据库集群中不重复即可且必须不能重复
保存退出,重启Mysqld服务,使配置生效。修改到配置文件,最好都重启该配置相关的程序或服务。
[root@chenllcentos ~]# service mysqld restart
[root@chenllcentos ~]# mysql -uroot -p*********
查看主数据库master状态。
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000015
Position: 106
Binlog_Do_DB:
Binlog_Ignore_DB: mysql,information_schema
可以看出,Binlog_Ignore_DB显示的信息就是刚才我们在配置文件所配置的信息。此外,还有两个重要的参数需要记下:mysql-bin.000015和106。从数据库就是根据这两个参数,完成主从复制,以达到数据同步的效果。
从数据库要读取主数据库日志文件,需要主数据开放授权用户。
mysql> GRANT REPLICATION SLAVE ON *.* to 'slave'@'1XX.XX.XX.182' identified by 'root'
mysql> GRANT REPLICATION SLAVE ON *.* to 'slave1'@'1XX.XX.XX.183' identified by 'root'
进行从数据库配置时,将使用到这两个授权用户。
出于数据安全性考虑,Mysql提供访问权限控制,若以主机的方式远程访问数据库,需要开启相应权限。
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'1XX.XX.XX.181' IDENTIFIED BY 'root' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'1XX.XX.XX.182' IDENTIFIED BY 'root' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'1XX.XX.XX.183' IDENTIFIED BY 'root' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
最后,还需要修改iptables,对数据库端口3306放行。
[root@chenllcentos ~]# vi /etc/sysconfig/iptables
新增如下语句:
# 放行Mysql端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
至此,完成主数据库配置。接下来,让我们进行从数据库配置。
(ps:可以选择直接关闭防火墙,线下环境测试使用,不搞过于复杂)
2.从数据库配置
从数据库配置相对主数据配置相对简单,主要包括配置文件修改和主从复制设置。现以服务器B为例进行说明。
修改从数据库配置文件。
[mysqld]
max_connections=1000
server-id=2 #新增
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
设置主从数据库同步点。
mysql> change master to master_host='1XX.XX.XX.181',master_user='slave',master_password='root',master_log_file='mysql-bin.000015',master_log_pos=106;
还记得mysql-bin.000015和106这两个参数吗?就是我们在主数据库查看master状态所显示的信息。
启动主从复制。
mysql> slave start;
查询slave状态。
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 1XX.XX.XX.181
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000015
Read_Master_Log_Pos: 106
Relay_Log_File: mysqld-relay-bin.000005
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000015
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: 106
Relay_Log_Space: 758
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:
只有当Slave_IO_Running和Slave_SQL_Running都显示Yes时,才表示主从复制配置成功。否则失败,检查上述配置过程。
服务器C从数据库的配置过程类似,此处略去。
主从复制验证
首先,在主数据建立一个demo数据库,看两个从数据库是否会自动进行复制。
在服务器A登录主数据库,查看现有数据库。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
现在,新增一个测试数据库demo。
mysql> create database demo;
接下来,分别登录服务器B和服务器C的从数据库,查询数据库。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| demo |
| mysql |
| test |
+--------------------+
可以发现,当主数据库发生改动,从数据库会相应同步,并且同步的过程是异步进行的。因此,可以验证我们配置的主从复制已经生效。