一、Mysql主从复制
将主数据库中的DDL和DML操作通过二进制日志传输到从数据库上,然后将这些日志重新执行(重做);从而使得从数据库的数据与主数据库保持一致
1、Mysql主从复制
###server1
scp -r /usr/local/mysql/ server2:/usr/local/
scp /etc/my.cnf server2:/etc/
###server2
cd /usr/local/mysql/support-files
cp mysql.server /etc/init.d/mysqld
cd
vim .bash_profile ##添加变量
///
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
///
source .bash_profile
which mysql ##/usr/local/mysql/bin/mysql
useradd -M -d /data/mysql -s /sbin/nologin mysql
mkdir /data/mysql -p ##创建数据目录
chown mysql.mysql /data/mysql
mysqld --initialize --user=mysql ##初始化数据库,此时会有一个初始密码,如果失败说明/data/mysql/下有文件需要清空,在进行初始化!!!
/etc/init.d/mysqld start
mysql_secure_installation ##修改密码
提示一
是否设置安全插件8位大小写的密码 NO
提示二
是否修改root密码 NO
提示三
安装一个匿名用户允许任何人登陆mysql数据库
是否删除匿名用户 YES
提示四
只允许localhost连接确保别人无法在网络中猜出密码
禁止root远程登陆 YES
提示五
mysql提供一个test的数据库任何人都可以访问仅用与测试
是否删除测试数据库 YES
提示六
重新加载特权表将确保到目前为止所做的所有更改将立即生效
是否重新加载特权表 YES
###server1
cd /etc/
vim my.cnf ##修改配置
///
[mysqld]
log-bin=mysql-bin ##表示启用binlog,log-bin
决定了msyql 的binlog的名字,?成的binlog名字为mysql-bin.000001
server_id=1
///
/etc/init.d/mysqld restart
cd /data/mysql/
ls ---> mysql-bin.000001 mysql-bin.index ##mysql-bin.000001数据库的二进制操作日志,每重启一次会生成新的;mysql-bin.index,二进制日志的索引文件,记录了所有的日志
mysql -p
> create user 'repl'@'%' identified by 'westos'; ##添加授权用户
> grant replication slave on *.* to 'repl'@'%'; ##授权
###server1
> show master status;
###server2
vim /etc/my.cnf
///
[mysqld]
server_id=2
///
/etc/init.d/mysqld restart
主从复制之前,主从主机数据一定要同步,
mysql -p
> set global server_id=2;
> show variables like 'server_id';
###server1
> show variables like 'server_id';
> show databases;
> exit
cd /data/mysql ##此时因为主从库数据不同步,所以需要将主库数据备份并传给从库
mysqlbinlog mysql-bin.000001 ##查看日志
mysqldump -p westos > dump.sql ##备份数据
scp dump.sql server2: ##scp到~路径
###server2
cd
mysqladmin -p create westos ##以管理员身份建库,因为dump.sql没有建库,所以需要自己建库
mysql -p westos < dump.sql ##备份导入
mysql -pwestos
> change master to master_host='172.25.77.1', master_user='repl', master_password='westos', master_log_file='mysql-bin.000002', master_log_pos=696(根据自己在server1查到的数字); ##slave从某台主机的某个日志,某个位置开始同步
> show slave status\G;
> select * from linux; ##查看liunx数据
二、GTID
GTID即全局事务ID (global transaction identifier), 其保证为每一个在主上提交的事务在复制集群中可以生成一个唯一的ID。mysql主从结构在一主一从情况下对于GTID来说就没有优势了,而对于2台主以上的结构优势异常明显,可以在数据不丢失的情况下切换新主。
###server1
vim /etc/my.cnf
///
enforce-gtid-consistency=OFF
///
/etc/init.d/mysqld restart
###server2
vim /etc/my.cnf
///
gtid_mode=ON
enforce-gtid-consistency=OFF
///
/etc/init.d/mysqld restart
mysql -p
> stop slave;
> change master to master_host='172.25.24.1', master_user='repl', master_password='westos', master_auto_position = 1;
> start slave;
> show slave status\G; ##Slave_IO_Running: Yes Slave_SQL_Running: Yes
###server1
mysql -pwestos
> use westos
> insert into linux values ('user4','444');
> select * from linux;
###server2
> show databases;
> use mysql
> select * from liunx;
> exit
###server1
scp -r /usr/local/mysql/ server3:/usr/local/
scp /etc/my.cnf server3:/etc/
scp /etc/init.d/mysqld server3:/etc/init.d/
###server3
vim /etc/my.cnf
///
server-id=3
gtid_mode=ON
enforce-gtid-consistency=ON
///
useradd -M -d /data/mysql -s /sbin/nologin mysql
vim .bash_profile ##添加变量
///
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
///
source .bash_profile
mkdir /data/mysql -p ##创建数据目录
chown mysql.mysql /data/mysql
mysqld --initialize --user=mysql ##初始化数据库,此时会有一个初始密码,先记住
/etc/init.d/mysqld start
mysql_secure_installation ##修改密码
###server2
vim /etc/my.cnf
///
log-bin=mysql-bin
server-id=2
log_slave_updates=ON
gtid_mode=ON
enforce-gtid-consistency=ON
///
/etc/init.d/mysqld restart
mysql -pwestos
> show slave status\G; ##查看IO SQL 是否是yes
> grant replication slave on *.* to repl@'%' identified by 'westos';
###server1
mysqldump -p westos > dump.sql ##备份
scp dump.sql server3:
###server3
mysqladmin -p create westos ##以管理员权限建表
mysql -p westos < dump.sql
mysql -pwestos
> use westos
> show tables;
> select * from linux;
> change master to master_host='172.25.77.2', master_user='repl', master_password='westos', master_auto_position = 1; ##3去复制server2
> start slave;
> show slave status\G; ##slave_io_running:yes slave_sql_running:yes
###server1
> use westos
> insert into linux values ('user6','666');
###server3
> select * from linux;
###server2
mysqlbinlog server2-relay-bin.index
mysqlbinlog mysql-bin.000001 -v
mysql -pwestos
> show slave status\G; ##查看IO SQL 是否是yes
###server3
> show slave status\G; ##查看IO SQL 是否是yes
|