本文共 5517 字,大约阅读时间需要 18 分钟。
一、MySQL主从介绍
mysql主从应用场景:1、数据备份,如果主库机器出现宕机,可以切换到从库机器为web提供服务2、也是数据备份,但是从库机器可以为web服务提供读数据的功能,但是不能写数据,来减轻主库机器的压力二、准备工作准备两台机器,一个作为主库服务器,一个作为从库服务器首先要在两台机器上分别安装mysql,具体安装步骤可参考之前笔记链接: 大致安装步骤可分为:1、下载.tar.gz包wget 2、解压tar.gz包tar zxvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz3、挪动目录并改名mv mysql-5.6.36-linux-glibc2.5-x86_64 /usr/local/mysql 4、初始化,需要事先添加mysql用户和创建data目录./scripts/mysql_install_db --user=mysql --datadir=/data/mysql 初始化之后要检查下初始化是否成功,初始化成功的标志是两个OK或者执行完命令输入#echo $?5、修改配置文件vi /etc/my.cnf定义datadir和socket路径6、拷贝启动脚本到/etc/init.d/目录下并重命名为mysqldcp support-files/mysql.server /etc/init.d/mysqld7、编辑/etc/init.d/mysqld文件,定义basedir和datadir路径vim /etc/init.d/mysqld8、启动mysql/etc/init.d/mysqld start Starting MySQL.. ERROR! The server quit without updating PID file (/data/mysql/linux-01.pid). //启动报错排查问题思路:查看错误日志#tail /data/mysql/linux-01.err06-28 21:34:28 2726 [Note] Shutting down plugin 'CSV'06-28 21:34:28 2726 [Note] Shutting down plugin 'MRG_MYISAM'06-28 21:34:28 2726 [Note] Shutting down plugin 'MEMORY'06-28 21:34:28 2726 [Note] Shutting down plugin 'MyISAM'06-28 21:34:28 2726 [Note] Shutting down plugin 'sha256_password'06-28 21:34:28 2726 [Note] Shutting down plugin 'mysql_old_password'06-28 21:34:28 2726 [Note] Shutting down plugin 'mysql_native_password'06-28 21:34:28 2726 [Note] Shutting down plugin 'binlog'06-28 21:34:28 2726 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete#less /data/mysql/linux-01.err看到错误信息有如下提示:Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)#ls -l /data/mysql/ //查看到/data/mysql/文件的属主属组属于root解决方法:修改/data/mysql/文件的属主属组为mysql:mysql#chown -R mysql:mysql /data/mysql/#/etc/init.d/mysqld start //再次启动就启动成功了Starting MySQL......... SUCCESS!#chkconfig mysqld on //设置开机启动mysqld服务把两台机器的mysql服务都启来接下来需要配置主从的配置文件三、配置主#vim /etc/my.cnf //修改my.cnf,增加如下内容#/etc/init.d/mysqld restart //重启mysql#cd /data/mysql/#ls -ltaminglinux1.index 是前缀文件,是它的索引,aminglinux1.000001 是二进制日志文件,这两个文件是实现主从的根本#mysqldump -uroot -p123456 zrlog > /tmp/zrlog.sql //备份zrlog数据库#mysql -uroot -p123456 -e "create database aming" //创建一个新库,aming库#mysql -uroot -p123456 aming < /tmp/zrlog.sql //把备份的zrlog数据库恢复到aming库#ls -lt //参考的主从就是aming这个库了,log_bin里面完整的记录了数据库的过程,log_bin在my.cnf中定义的就是aminglinux1,所以log_bin就是aminglinux1.000001#mysql -uroot -p123456mysql> grant replication slave on . to 'repl'@'192.168.238.130' identified by '123456';/创建主从同步数据的用户,只需要replication slave 权限,.表示所有的库所有的表,对repl用户,针对从库的IP地址mysql> flush tables with read lock; //锁下表,目的是不让它再写了,数据先暂停,状态先保持在这里,这样从库同步数据的时候,两者保持一致,这样才能实现同步mysql> show master status; //需要记住如下红框中的File和Positionmysql> quit#ls -l //备份如下几个数据库,#mysqldump -uroot -p123456 log > /tmp/log.sql //备份log库#mysqldump -uroot -p123456 logs > /tmp/logs.sql //备份logs库#mysqldump -uroot -p123456 test > /tmp/test.sql //备份test库#ls /tmp/sql //查看/tmp/目录下的.sql文件/tmp/log.sql /tmp/logs.sql /tmp/test.sql /tmp/zrlog.sql四、配置从#ps aux |grep mysql //查看mysql服务有没有起来#vim /etc/my.cnf //配置从库服务器,添加server-id=130,从库服务器IP:192.168.238.130,从库配置文件不需要配置log_bin=""这个参数,只有主库服务器才需要二进制日志文件#/etc/init.d/mysqld restart //重启mysql#scp 192.168.238.128:/tmp/.sql /tmp/ //复制主库/tmp/*.sql下所有的.sql文件到本机的/tmp/目录下log.sql 100% 1257 304.8KB/s 00:00logs.sql 100% 1258 458.8KB/s 00:00test.sql 100% 1258 353.4KB/s 00:00zrlog.sql 100% 10KB 353.0KB/s 00:00#mysql -uroot //提示命令未找到bash: mysql: command not found#alias 'mysql=/usr/local/mysql/bin/mysql' //做别名#alias 'mysqldump=/usr/local/mysql/bin/mysqldump'#mysql -uroot //做完别名就可以使用这个命令了mysql> create database aming; //创建几个库mysql> create database log;mysql> create database logs;mysql> create database zrlog;mysql> quit#mysql -uroot log < /tmp/log.sql //恢复log数据库#mysql -uroot logs < /tmp/logs.sql //恢复logs数据库#mysql -uroot zrlog < /tmp/zrlog.sql //恢复zrlog数据库#mysql -uroot aming < /tmp/zrlog.sql //把备份的zrlog数据库恢复到aming库,保持两边数据一致#ls /data/mysql/ //查看mysql目录下数据库是否和主库的mysql目录下数据库一致#mysql -urootmysql> stop slave;mysql> change master to master_host='192.168.238.128', master_user='repl', master_password='123456', master_log_file='aminglinux1.000002', master_log_pos=10922;//解释:这一行命令是配置主从同步的核心,master_host='192.168.238.128'这个IP是主库服务器IP;也可以指定port=3306,默认是3306可以省略;master_user='repl'用户是repl;master_password='123456'密码是123456;master_log_file='aminglinux1.000002',这里的master_log_file填写的就是在主库里面mysql> show master status;出来的方框里面的File;master_log_pos=10922这里的这个数值也是在主库里面mysql> show master status;出来的方框里面的Position方框里面的数值。mysql> start slave;mysql> show slave status\G //查看主从有没有配置成功,主要看有没有下图的两个Yes以上是从库配置完成没有问题需要在主库上开启写的权限,具体操作如下:[root@linux-01 ~]# mysql -uroot -p123456mysql> unlock tables; //开启主库写的权限五、测试主从同步以后做忽略某个库的时候使用replicate_wild_do_table= 和 replicate_wild_ignore_table= 这两个配置参数,尽量不要使用replicate_do_da= 、replicate_ignore_db= 、 replicate_do_table= 、 replicate_ignore_table= 这四个配置参数主库上操作:[root@linux-01 ~]# mysql -uroot -p123456mysql> use aming;mysql> show tables;mysql> select count() user;mysql> drop database aming; //删除aming库,可以在从库上验证有没有删除aming库查看从库里面的:[root@linux-02 ~]# mysql -urootmysql> use aming;mysql> select count() user;mysql > show databases; //可以看到aming库已经删除问题:如果遇到在从库上误删除库或者表,mysql> show slave status\G 查看状态应该是有一个NO解决方法:首先保持主从两边是数据库是一直的,在主库上查看mysql> show master status;两个数值,在从库mysql> stop slave;mysql> change master to master_host='192.168.238.128', master_user='repl', master_password='123456', master_log_file='aminglinux1.000002', master_log_pos=10922;mysql> start slave;mysql> show slave status\G //再次查看状态就是两个Yes了转载于:https://blog.51cto.com/13669226/2133991