18g网站空间网上推广app怎么做
MySQL的一种高可用的配置是组成双Master的拓扑结构。就是说开启两个MySQL服务,然后设置成互为对方的Slave。这样无论哪一个的MySQL数据库进行更改,另一个MySQL数据库都会进行同步。当其中一台主机发生故障时,进行Master的切换是很方便的事情。
本文使用的环境:
CentOS 7
MySQL 5.7
在单机上启动两个MySQL服务
1、安装MySQL:
首先要要安装MySQL5.7,我是下载5.7的rpm包做的,可以网上找找mysql-5.7.18-1.el6.x86_64.rpm-bundle.tar,然后解压并逐个安装他们:
tar -zxvf mysql-5.7.18-1.el6.x86_64.rpm-bundle.tar
rpm -ivh mysql-community-common-5.7.18-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.18-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.18-1.el6.x86_64.rpm
rpm -ivh mysql-community-client-5.7.18-1.el6.x86_64.rpm
rpm -ivh mysql-community-server-5.7.18-1.el6.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.18-1.el6.x86_64.rpm
2、创建数据目录:
因为是在单机上启动两个MySQL服务,因此不能像初学者那样使用默认的数据目录,必须为每个MySQL服务建立一个数据目录。数据目录可以理解为MySQL存放数据表等东西的目录。这个动作需要手动操作,我为两个服务创建了两个文件夹,并且改变其所有者:
mkdir -p /data/mysql/3306
mkdir -p /data/mysql/3307
chown -R mysql:mysql /data
后续两个服务一个绑定3306端口,一个绑定3307端口。之后我们需要对数据库的数据目录进行初始化:
/usr/sbin/mysqld --initialize --basedir=/usr --datadir=/data/mysql/3306 --user=mysql
/usr/sbin/mysqld --initialize --basedir=/usr --datadir=/data/mysql/3307 --user=mysql
为了后续登录,还需要修改数据库的初始密码,先用跳过验证的模式启动数据库:
/usr/bin/mysqld_safe --datadir=/data/mysql/3306 --socket=/data/mysql/3306/mysqld.sock --skip-grant-tables &
然后直接输入mysql就可以登入了,之后修改密码:
USE mysql;
UPDATE user SET authentication_string=PASSWORD('123') WHERE user='root';
FLUSH PRIVILEGES;
修改完密码之后kill掉进程。
3、修改配置文件:
新建一个配置文件my_multi.cnf,对文件进行编辑:
[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user=root[mysqld1]
server_id=1
socket = /data/mysql/3306/mysqld.sock
port = 3306
datadir = /data/mysql/3306
plugin-dir=/usr/lib64/mysql/plugin
log-bin=mysql-bin
character-set-server = utf8
collation_server=utf8_general_ci
innodb_buffer_pool_size=6G
innodb_log_buffer_size=320M
innodb_flush_log_at_trx_commit=2
max_connections=2000[mysqld2]
server_id=2
socket = /data/mysql/3307/mysqld.sock
port = 3307
datadir =/data/mysql/3307
plugin-dir=/usr/lib64/mysql/plugin
log-bin=mysql-bin
character-set-server = utf8
collation_server=utf8_general_ci
innodb_buffer_pool_size=6G
innodb_log_buffer_size=320M
innodb_flush_log_at_trx_commit=2
max_connections=2000[mysqldump]
quick
max_allowed_packet = 16M
character-set-server = utf8
collation_server=utf8_general_ci
启动mysql会找默认的配置文件,一般会找到/etc/my.cnf,后面我们让其指定使用my_multi.cnf里面的配置。
4、启动服务:
/usr/bin/mysqld_multi --defaults-file=/etc/my_multi.cnf start 1,2
其中后面的1、2两个数字,和前面配置文件中的mysqld1、mysqld2这两个数字对应。
可以通过下面的命令查看两个数据库服务是否运行:
/usr/bin/mysqld_multi --defaults-file=/etc/my_multi.cnf report 1,2
以后启动服务这些操作,可以写成一个脚本,省得每次启动输入一大串东西
这样就可以在一台主机上启用两个MySQL服务了。
5、配置两台机进行主从复制
现在的步骤是要把两台启动的服务连起来,并且让他们互为主从关系,就是说哪台机器上有变化,另一台机器也会有相应的变化。
首先在/etc/my_multi.cnf文件里的mysql1和mysql2里面分别添加内容
[mysqld1]
...
auto-increment-increment = 2
auto-increment-offset = 1
[mysqld2]
...
auto-increment-increment = 2
auto-increment-offset = 2
之后要重启服务
两个服务要互连,因此要为另一个服务创建一个帐号,用来进行主从复制,可以直接用root,当然最好还是建一个,在3306上建:
GRANT REPLICATION SLAVE ON *.* TO 'master2'@'localhost' IDENTIFIED BY '123';
在3307上建:
GRANT REPLICATION SLAVE ON *.* TO 'master1'@'localhost' IDENTIFIED BY '123';
之后要设置指向对方二进制日志的位置。二进制日志不懂的童鞋,可以理解为数据库进行的变更操作(建表、插入、删除等)都会记录到二进制日志中,然后通过二进制日志,就能把数据库变更的操作重现到Slave机上。
由于当前两个服务基本没进行什么操作,因此可以直接取当前状态开始建立主从关系。先在3306服务上输入命令
SHOW MASTER STATUS\G;
记下File和Position的值,然后在3307服务上输入
CHANGE MASTER TO MASTER_HOST='localhost', MASTER_PORT=3306,MASTER_USER='master2', MASTER_PASSWORD='123', MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=456;
其中MASTER_LOG_FILE为刚才查询的File值,MASTER_LOG_POS为刚才查询的Position值。
之后执行命令
START SLAVE;
然后查看SLAVE状态:
SHOW SLAVE STATUS\G
看Last_Error有没有报错
现在已经把3307的服务作为3306的SLAVE了,可以测试下在3306上建个表,看3307是否能同步到。
然后在3307上执行:
SHOW MASTER STATUS\G;
记下File和Position的值,然后在3306上输入
CHANGE MASTER TO MASTER_HOST='localhost', MASTER_PORT=3307,MASTER_USER='master1', MASTER_PASSWORD='123', MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=456;
其中MASTER_LOG_FILE为刚才查询的File值,MASTER_LOG_POS为刚才查询的Position值。
之后执行命令
START SLAVE;
这样就完成了。可以测试一下在3306服务上创建一个表,应该能在3307上查到这个表,这样就算搭建成功了
如果发现没有同步成功,可以输入SHOW SLAVE STATUS\G查看是否存在error,一个常见的问题是前面输入File和Position的值搞错了,这会导致同步失败
后续可以查看一下二进制日志文件,并输入SHOW MASTER STATUS \G和SHOW BINLOG EVENTS IN '二进制日志文件名'\G进行观察。可以发现从机同步主机信息的时候,并没有同步二进制日志,这个同步日志是可以在配置文件中设置的,留给各位看官自己去实现吧。