最近因项目需要,用户并发要求2000,而且访问频度比较大的页面,可能会涉及到读写操作,为了提高数据库的读数据的效率,于是考虑采取读数据库写分离的配置方式,来暂时解决这个问题。一台只读,一台只写。可能还会有其他更好的解决方案,但是为了敦促自己再增加一点数据库知识,于是就有如下方案了。因为项目组之前一直使用mysql数据库的,故继续研究下去了。如下配置是本人自己编辑的,如有雷同,纯属巧合,侵犯到您的权益还请联系我(qq:334170431)我进行修改。
服务器A:10.10.21.xx,服务器B:10.10.130.xx
Mysql版本:5.6.38-winx64
1、安装master
1.1、创建配置文件my.ini
解压后,找到my-default.ini文件,拷贝并粘贴在同级目录下面,重命名为my.ini
编辑内容如下:其中黄色部分是配置为master服务器
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#为主服务器的ID值
server-id=1
#二进制变更日值
log-bin=master-bin
log-bin-index=master-bin.index
# 设置3306端口
port =3306
# 设置mysql的安装目录
#basedir=E:\mysql-5.6.38-winx64\MySQL
# 设置mysql数据库的数据的存放目录
#datadir=E:\mysql-5.6.38-winx64\MySQL\data
# 允许最大连接数
max_connections=500
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 跳过密码验证
#skip-grant-tables
explicit_defaults_for_timestamp=1
#当secure_file_priv的值没有具体值时,表示不对mysqld的导入|导出做限制
secure_file_priv=
1.2、设置root密码,方法略,不会的去问度娘
1.3、创建slave可以访问master的用户:
CREATEUSER 'backup'@'10.10.130.xx' IDENTIFIED BY 'backup';
GRANT SUPER, REPLICATION SLAVE ON *.* TO 'backup'@'10.10.130.xx';
注:权限不对的时候会执行2.3会报错
1.4、使用showmaster status;命令查看状态:
截图不能上传,比较尴尬,使用文字替换一下:
file position
master-bin.000001 120
2、安装slave
2.1、创建配置文件my.ini
安装方法同1.1,只是配置文件内容稍微改变一下:
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#为从服务器的ID值
server_id = 2
#二进制变更日值
log_bin = slave-bin
#中继日志
relay_log = slave-relay-bin
relay-log-index=slave-relay-bin.index
#表示slave将复制事件写进自己的二进制日志
log_slave_updates = 1
#只读
read_only = 1
# 设置3306端口
port =3306
# 设置mysql的安装目录
#basedir=E:\mysql-5.6.38-winx64\MySQL
# 设置mysql数据库的数据的存放目录
#datadir=E:\mysql-5.6.38-winx64\MySQL\data
# 允许最大连接数
max_connections=800
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 跳过密码验证
skip-grant-tables
explicit_defaults_for_timestamp=1
#当secure_file_priv的值没有具体值时,表示不对mysqld的导入|导出做限制
secure_file_priv=
2.2、设置root密码,方法略,不会的去问度娘
2.3、启动slave后,设置查询master,即同步日志:
changemaster to master_host='10.10.21.xx',
master_port=3306,
master_user='backup',
master_password='backup',
master_log_file='master-bin.000001',
master_log_pos=0;
标黄部分的值取1.4查询结果(每次手动同步也是如此)
2.4、使用show slave status;查看同步状态:
两列值都是Yes的时候表示同步成功。此时可以在master里面创建数据库就会同步的slave里面。
注:如果是直接拷贝master数据库文件安装slave,导致data下面的auto.cnf文件内容相同,同步失败,报如下错误:
show slave status;
last_io_error
fatal error: the slave i/o thread stops because master and slave have equal mysql server uuids; these uuids must be different for replication to work.
解决方法:1、删除auto.cnf,重启数据库,会再次生成新的文件
2、手动修改里面的值也可以。
3、手动同步日志步骤
3.1、重复1.4操作
3.2、执行:stopslave ;
3.3、重复2.3操作(注意重新取值)
3.4、执行:startslave ;