1. Mysql安装
这里的服务器环境是 centos 6.7,可以去mysql官网下载相应的版本,centos可以选择 redhat enterprise版本。分别在master和slave上安装好。
2. 操作Mysql
启动:/etc/init.d/mysqld start;
重启:/etc/init.d/mysqld restart;
关闭:/etc/init.d/mysqld stop;
2. 配置
安装成功之后如果需要修改root账号的密码,可以使用下面的语句:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '这里是密码' WITH GRANT OPTION;
tomcat 主要的配置文件是 /usr/local/mysql/my.cnf
对于master需要打开binary log,配置如下:
创建复制账号(用于slave从master复制):
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%' IDENTIFIED BY 'mysql';
'192.168.0.%' 限制此账号的使用IP,安全起见一般把此IP限制为slave 的IP
[mysqld]
server-id=1//给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号
log-bin=master-bin
log-bin-index=master-bin.index
重启mysql服务:
查看master的状态:登录数据库,运行命令 show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 1223 | | |
+-------------------+----------+--------------+------------------+
如上所示:file 和 position的值在配置slave会用到。
对于slave需要打开relay log,配置如下:
[mysqld]
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
登录slave数据库:运行下面的命令连接master:
change master to master_host='192.168.0.104', //Master 服务器Ip
master_port=3306,
master_user='repl',
master_password='mysql',
master_log_file='master-bin.000001',//Master服务器产生的日志
master_log_pos=1223;
然后运行下面的命令启动slave: start slave
查看slave状态: show slave status
这里会返回很多参数值,如下:
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.222 //主服务器地址
Master_User: mysync //授权帐户名,尽量避免使用root
Master_Port: 3306 //数据库端口,部分版本没有此行
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 600 //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
Relay_Log_File: ddte-relay-bin.000003
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
正常情况下最后两项为yes才说明配置成功。至于线程:Slave_IO_Running和Slave_SQL_Running和左右可以自行Google。
可以在master库做一些操作看slave库有没有成功同步过去,如果没有成功同步过去可以在slave上查看日志(日志目录在 /data/mysql/log)
如果发现slave不能成功同步:先查看日志,最常见的原因是之前master上做了某些操作未成功同步到slave上,然后slave继续做同步的话就会出错,比如找到对象等等, 一般同步出错sql复制线程会挂掉(这应是为了数据的完整性),这时可以先去检查下master的状态(show master status),可以查看下日志文件的名字和position是多少,如果有变化,先关掉slave(stop slave)应该按照master的目前的状态(主要是二进制日志文件名及目前日志的位置position),在slave上重新连接master。重启slave,查看slave状态,看io线程和sql线程是否成功启动。