1.实验环境

 1.1系统环境

      主库名:master,ip地址:192.168.4.44;从库名:Nodes03,ip地址:192.168.4.150。

1.2确认已安装mysql

[root@master ~]# rpm -qa | grep  mysql    主库确认mysql-5.1.69-1.el6_4.i686mysql-libs-5.1.69-1.el6_4.i686mysql-server-5.1.69-1.el6_4.i686[root@Nodes03 ~]# rpm -qa | grep mysql    从库确认mysql-5.1.69-1.el6_4.i686mysql-libs-5.1.69-1.el6_4.i686mysql-server-5.1.69-1.el6_4.i686

1.3设置开机启动

[root@master ~]# chkconfig --list mysqldmysqld          0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭[root@master ~]# chkconfig --level 2345 mysqld on[root@Nodes03 ~]# chkconfig --list mysqldmysqld          0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭[root@Nodes03 ~]# chkconfig --level 2345 mysqld on

     主从上的mysql版本需要一致。

1.4主从复制原理简说

       msyql的主从复制是一个异步复制的过程,主库将数据更改记录到二进制日志中,从库io线程,开启一个普通客户连接, 从库获取主库的二进制日志,启动二进制日志转存储进程,它会读取二

进制日志事件,然后将其写自己的中继日志,其sql线程会对其中的事件进行重建。mysql复制的用途有做备份,负载平衡,高可用性及故障转移。

1.5 创建LVM

      在这里创建LVM,主要是为后面的lvm快照做备份时做铺垫,生产环境部署中这个lvm应该都事先部署好。

[root@master ~]# pvcreate /dev/sdb                   创建物理卷  Physical volume "/dev/sdb" successfully created[root@master ~]# vgcreate mysqld /dev/sdb            创建卷组  Volume group "mysqld" successfully created[root@master ~]# lvcreate -L 1016M -n mysqld-data mysqld 创建逻辑卷  Logical volume "mysqld-data" created[root@master ~]# mkfs -t ext4 /dev/mysqld/mysqld-data  格式化逻辑卷[root@master ~]# mount -t ext4 /dev/mysqld/mysqld-data /data   使用逻辑卷[root@master ~]# df -h                                查看文件系统              容量  已用  可用 已用%% 挂载点/dev/sda2             5.5G  3.8G  1.5G  72% /tmpfs                 122M     0  122M   0% /dev/shm/dev/sda1             146M   45M   94M  33% /boot/dev/sda5             9.7G  730M  8.5G   8% /opt/dev/sdc              504M   78M  402M  17% /data03/dev/mapper/mysqld-mysqld--data                     1001M   18M  932M   2% /data

1.6 更改数据库的数据目录

      这里的数据库的数据目录位置应该在部署数据库就应该考虑到,应避免数据库在运行中期来更改,以避免不必要的麻烦。

[root@master ~]# /etc/init.d/mysqld statusmysqld 已停[root@master ~]# cp -rp /var/lib/mysql/ /data/     拷贝原数据目录[root@master ~]# chown mysql:mysql -R /data/mysql/ 更改权限

/etc/my.cnf更改如下

datadir=/data/mysql      数据目录

启动数据库

[root@master ~]# /etc/init.d/mysqld start正在启动 mysqld:                                          [确定]

2.配置master

  2.1/etc/my.cnf配置如下

log-bin-index=mysql-bin.indexlog-bin=mysql-bin.logserver-id=10

       在这里,msyql索引名与日志文件名默认是主机名字,如果主机被更改,日志文件的名字就会有变化,这些就会导致恢复有问题,为标准化,需要统一命名日志文件名,其中包括中继日志的文件名。

注:如果数据库忘记root密码,可用这个mysqld_safe --skip-grant-tables选项启动数据,然后去登录(无需密码)数据库修改密码;

 2.2创建复制用户

mysql> grant replication slave on *.* to   'salves'@'192.168.4.%' identified by '123456';  创建用户Query OK, 0 rows affected (0.05 sec)mysql> show grants for 'salves'@'192.168.4.%';  查看权限+-----------------------------------------------------------------------------------------------------------------------------+| Grants for salves@192.168.4.%                                                                                               |+-----------------------------------------------------------------------------------------------------------------------------+| GRANT REPLICATION SLAVE ON *.* TO 'salves'@'192.168.4.%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |+-----------------------------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)

 2.3主库锁表只读

mysql> flush tables with read lock;  锁表Query OK, 0 rows affected (0.06 sec)mysql> show master status\G;   查看File,Position*************************** 1. row ***************************            File: mysql-bin.000007        Position: 727    Binlog_Do_DB:Binlog_Ignore_DB:1 row in set (0.01 sec)ERROR:No query specified

2.4主库备份数据

[root@master ~]# mysqldump -uroot -p --all-databases >allbackdb.sql

3.slave配置

  3.1slave mysql的从库my.conf配置

在my.cnf中加入如下内容

relay-log-index=mysql-relay-indexrelay-log=mysql-relay.logserver-id=11

  注:从库默认是不开启二进制日志,除非其要升级为主库。

重启mysqld服务

[root@Nodes03 ~]# service mysqld restart

  3.2从库恢复数据

[root@Nodes03 ~]# scp root@192.168.4.44:/root/allbackdb.sql .[root@Nodes03 ~]# mysql -u root -p < allbackdb.sql

  3.3连接同步到master端

mysql>slave stop;              停止slavemysql> change master to  master_host='192.168.4.44',master_user='salves',master_password='123456',master_log_file='mysql-bin.000007',master_log_pos=727;mysql>slave start;             如果出现如下信息则连接成功sql> show slave status\G;     *************************** 1. row***************************          Slave_IO_State: Waiting for master to send event                     Read_Master_Log_Pos: 727          Relay_Master_Log_File: mysql-bin.000007          Slave_IO_Running: Yes            Slave_SQL_Running: Yes

  3.4回到主库解锁

mysql> unlock tables;Query OK, 0 rows affected (0.00 sec)

  3.5测试同步

  主库导入数据

[root@master ~]# mysql -uroot -p 

 从库验证数据

4.LVM快照来备份还原

  上面备份与恢复的过程,我们可以用lvm快照的方式来完成,从而来实现其主从同步。

4.1主库锁表只读

mysql> flush tables with read lock;  锁表Query OK, 0 rows affected (0.02 sec)mysql> show master status\G;   查看File Position*************************** 1. row ***************************            File: mysql-bin.000007        Position: 1575    Binlog_Do_DB:Binlog_Ignore_DB:1 row in set (0.00 sec)ERROR:No query specified

 4.2LVM快照并将其打包压缩

[root@master backup]# lvcreate --size 1024M --snapshot --name back_mysql /dev/mysqld/mysqld-data    快照[root@master backup]# mount /dev/mapper/mysqld-mysqld--data /tmp/backup/       挂载快照[root@master backup]# tar -czvf mysql/ mysqlbackupdb.tar.gz  打包

 4.3从库获取LVM快照后的备份

[root@Nodes03 ~]# scp root@192.168.4.44:/tmp/backup/mysqlbackupdb.tar.gz /opt/[root@Nodes03 ~]# tar -zxvf /opt/mysqlbackupdb.tar.gz[root@Nodes03 ~]# mv mysql/* /var/lib/mysql/

 4.4连接同步到master端

mysql> slave stop;Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> change master to  master_host='192.168.4.44',master_user='salves',master_password='123456',master_log_file='mysql-bin.000007',master_log_pos=1575;Query OK, 0 rows affected (0.01 sec)mysql> slave start;Query OK, 0 rows affected (0.01 sec)查看连接是否成功mysql> show slave status\G;*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event               Read_Master_Log_Pos: 1575                 Relay_Master_Log_File: mysql-bin.000007             Slave_IO_Running: Yes            Slave_SQL_Running: Yes

回到主库解锁

mysql> unlock tables;

 4.5测试

主库导入

mysql> source /root/vsftpddb.sql;

从库验证

     本文主要介绍mysql的主从同步,同步也简单的说了lvm的简单用法,典型的是lvm快照。同时还有mysql的同种备份方法:mysqldump与lvm快照。

至此mysql主从同步实验完成。仅为初学者的记录,如有问题请指出,不胜感激。