mysql1和mysql分别上传源码包mysql-5.6.26.tar.gz,然后mysql1和mysql分别源码编译安装mysql:
cd
tar xf mysql-5.6.26.tar.gz -C /usr/local/src && cd /usr/local/src/mysql-5.6.26 && useradd -M -s /sbin/nologin mysql && cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL-USER=mysql && make -j 8 && make install &&
cd && chown -R mysql:mysql /usr/local/mysql/
cp /etc/my.cnf /etc/my.cnf.bak
rm -fr /etc/my.cnf
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig mysqld on
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
ln -s /usr/local/mysql/bin/* /bin/
/etc/init.d/mysqld start
mysql_secure_installation
一、mysql主从配置:
1、主mysql
192.168.146.13 :
创建需要同步的数据库:
mysql>create database HA;
mysql>use HA;
mysql> create table test(id int,name char(20));
mysql> insert into test values(‘001’,’zhangsan’);
/etc/init.d/mysqld stop
vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
增加下面4行:
log-bin=mysql-bin-master# 启用二进制日志
server-id=1 #本机数据库ID 标示
binlog-do-db=HA #可以被从服务器复制的库。二进制需要同步的数据库名
binlog-ignore-db=mysql #不可以被从服务器复制的库
重启mysql:
/etc/init.d/mysqld restart
授权:
mysql>grant replication slave on . to [email protected] identified by "123456";
mysql>grant replication slave on . to slave@'%' identified by "123456"; 授权给任何ip可以来同步。
查看状态信息:
mysql> show master status;
mysql-master-bin.000001
查看二进制日志:
ls /usr/local/mysql/data/
mysql> show binlog events\G
复制前要保证同步的数据库一致,导出数据库
mysqldump -uroot -p123456 HA >HA.sql #导出数据库
将导出的数据库传给从服务器
方法一:scp HA.sql [email protected]:/root
或者
记得清空两台服务器的iptables,要不然端口不能通信
iptables –F
/etc/init.d/iptables stop
chkconfig iptables off
mysql2:
两台数据库服务器mysql版本要一致
mysql> show variables like '%version%';
2、从mysql
192.168.146.14 :
修改从服务器配置文件:
从服务器没必要开启bin-log日志
vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
增加下面1行:
server-id= 2 #从服务器ID号,不要和主ID相同 ,如果设置多个从服务器,每个从服务器必须有一个唯一的server-id值,必须与主服务器的以及其它从服务器的不相同。可以认为server-id值类似于IP地址:这些ID值能唯一识别复制服务器群集中的每个服务器实
/etc/init.d/mysqld restart
测试连接到主服务器是否成功
mysql -uslave -p123456 -h 192.168.146.13
导入数据库,和主数据库服务器保持一致
msyql -uroot -p123456
mysql> create database HA;
mysql > use HA;
mysql > source HA < HA.sql
或者:
mysql -uroot -p123456 HA < HA.sql
mysql> change master to master_host='192.168.146.13',master_user='slave',master_password='123456';
mysql> start slave;
mysql>show slave status\G 查看状态
出现2个yes即为正常
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
做完以上步骤就是msyql主从配置,如果要部署成msyql主-主配置需继续如下配置:
二、mysql主主配置:
1、mysql2从
192.168.146.14:
vim /etc/my.cnf
增加 log-bin=mysql-bin-master# 启用二进制日志
server-id= 2
增加 binlog-do-db=HA #可以被从服务器复制的库。二进制需要同步的数据库名
增加 binlog-ignore-db=mysql #不可以被从服务器复制的库
/etc/init.d/mysqld restart
授权:
mysql>grant replication slave on . to [email protected] identified by "123456";
回到mysql1:
mysql> change master to master_host='192. 168.146.14',master_user='slave',master_password='123456';
三、重新同步所有数据:
mysql> stop slave;
mysql>drop database test;
回到主mysql:
mysqldump -uroot -p123456 HA >HA.sql #导出数据库
scp HA.sql [email protected]:/root
回到从mysql:
mysql -uroot -p123456 HA < HA.sql
mysql -uroot -p
mysql> stop slave;
mysql> change master to master_host='192.168.146.13',master_user='slave',master_password='123456';
mysql> start slave;
mysql>show slave status\G 查看状态
四、重新同步某个节点的数据:
主msyql:
mysql> show master status;
记录下 master_log_file='mysql-bin-master.000004' 和 master_log_pos=360
从mysql:
mysql> stop slave;
mysql> drop database test;
mysql> change master to master_host='192.168.146.13',master_user='slave',master_password='123456',master_log_file='mysql-bin-master.000004',master_log_pos=360;
mysql> start slave;
五、master挂了,如何提升slave为master
注意事项
1、默认mysq主从只能是master向slave同步数据,除非是主主或者是cluster才可以互相同步数据,当然可以配合keepalived或者mha进行vip的高可用
2、建议主从,或者主主的时候把另一台主设置为只读,防止数据不一致的情况发生。
查看数据库是否只读:show global variables like '%only%';
设置只读:set global read_only=1;