Mysql用户授权
1、登录mysql数据库
Mysql > mysql -u root -p 789123
2、给从服务器设置授权用户
Mysql>grant all on *.* to [email protected] identified by “password”;
Mysql>grant replication slave on *.* [email protected] identified by “password”;
注:从服务器要来主服务器上同步数据,就得给从服务器设置一个用户并且指定从服务器的ip,这样,从服务器才能连接到主服务器,从而,对数据进行同步,这是前提!
3、查看用户的授权表
Mysql>select user,host,password from mysql.user
注:如果授权成功,那么我们应该可以从结果集上看到授权的用户,以及对应的ip。
Mysql bin-log日志
1、开启mysql bin-log日志
Vi /etc/my.cnf
[mysqld]
port = 3306;
socket = /var/lb/mysql/mysql.block
log-slow-queries = mysql-slow.log
log-error = mysql.err
log = mysql.log
log-bin = mysql-bin
注:开启是【log-bin=mysql-bin】. 一旦保存,重启mysql,bin-log日志就开启了。
警告:修改配置后,一定记得重启mysql,使配置生效
service mysqld restart
2、查看bin-log日志是否开启
mysql> show variables like '%log_bin%';
3、与bin-log日志有关的日志刷新
刷新日志:mysql>flush logs;
注:这个操作会生成新的bin-log日志文件,每刷新一次,就会生成一个新的文件,目的是为了让你和旧的文件有个分离。
查看最后一个日志:mysql>show master status;
注:这个命令能够看到最后一次执行的位置,pos,这个有利于你定位到你要执行操作的bin-log日志。
清空所有的日志:mysql>reset master;
注:此操作会删除所有的 bin-log日志
查看bin-log日志:
a.首先进入到bin-log日志的目录
cd /mine/serve/mysql/var
b.使用bin目录下的mysqlbinlog文件进行查看
[root@iZm5eizpokikoertia0x31Z mysql]# /mine/serve/mysql/bin/mysqlbinlog mysql-bin.000001
这个时候呢,有可能会报错,“utf8字符集无效”,处理方式:
/mine/serve/mysql/bin/mysqlbinlog --no-defaults mysql-bin.000001
这样,就可以查看了!
使用bin-log日志恢复数据
a、进入到mysql的二进制目录
cd /mine/serve/mysql/bin
b、通过binlog日志执行恢复数据
./mysqlbinlog /mine/serve/mysql/data/mysql-bin.000002 --start-position=107 --stop-position=5601 | ./mysql -u root -p
Mysql备份数据(导出数据)
mysqldump -u root -p 789123 newdata -l -F/mine/tool/sql/newdata.sql
注:
-F即flush logs,每备份一次,就重新生成一个新的日志文件,包括bin-log日志,查看bin-log日志,用mysql>show master status,这一步很重要!
-l 即lock,是为了锁定库,只有当数据备份完毕,才可以解锁。
Mysql恢复(已备份的)和bin-log日志(宕机后的操作数据)
a、mysql -u root -p 789123 newdata -v -f < /mine/tool/sql/newdata.sql (已备份的)
注:
-v 查看导入的详细信息。
-f 即false,表示中间遇到错误的时候,自动跳过,继续执行下面的操作。
b、./mysqlbinlog bin-log.000005 | ./mysql -u root -p 789123 (宕机后的操作数据)
多行查看bin-log日志
./mysqlbinlog /mine/serve/mysql/data/bin-log.00005 | more
Bin-log指定位置恢复数据
a、指定开始、结束位置恢复数据
./mysqlbinlog /mine/serve/mysql/data/mysql-bin.000002 --start-position=107 --stop-position=5601 | ./mysql -u root -p
b、指定结束位置恢复数据
./mysqlbinlog /mine/serve/mysql/data/mysql-bin.000002 --stop-position=5601 | ./mysql -u root -p
c、指定时间恢复数据
./mysqlbinlog /mine/serve/mysql/data/mysql-bin.000002 --start-date=”2019-07-12 18:00:00” --stop-position=”2019-07-12 18:30:00” | ./mysql -u root -p
d、指定截止时间之前数据
./mysqlbinlog /mine/serve/mysql/data/mysql-bin.000002 --stop-position=”2019-07-12 18:30:00” | ./mysql -u root -p
Mysql主从复制的作用或优点
1、如果主服务器出现问题,可以快速切换到从服务器
2、可以在从服务器上执行查询操作,降低主服务器的压力
3、可以在从服务器上执行备份,以免备份期间影响主服务器的服务
注意:一般只有更新不频繁的数据或者对实时性要求不高的数据,可以通过从服务器进行查询,实时性要求比较高的数据仍然需要从主数据库进行查询。
Mysql数据库主从同步配置的基本步骤
-----== 主服务器配置
1、登录mysql数据库
mysql>mysql -u root -p db
2、给从服务器设置授权用户
mysql>grant all slave on *.* [email protected] identified by “pass”;
或
mysq>grant replication slave on *.* [email protected] identified by “pass”
3、修改主服务器的配置文件my.cnf,开通bin-log,并设置server-id的值
log-bin=mysql-bin
server-id=1
4、在主服务器上设定读锁,确保没有数据库操作,以便获得一个一致性的快照(选做)
mysql>flush tables with read lock;
注:数据量大的情况,必须锁定表,否则,无法做到数据完全同步。
5、查看主服务器上的当前的二进制日志名和位置偏移量
mysql>show master status;
6、这时,主服务器上已经停止了数据更新操作,这样备份,就可以完全同步了。备份的方式分为两种:
a、复制全部的数据;
b、Mysqldump备份数据
注:如果主库的服务可以停止,那么直接复制数据文件,是最快的方法。如:
tar -zcvf data.tar data
7、主数据库备份完毕以后,主数据库恢复写操作,剩下的操作,交给从服务器来执行就可以了。
mysql>unlock tables; (解锁所有的表)
8、主数据库的数据在从库恢复的最快方法,就是,将压缩包目录放到数据文件目录,解压即可。
-----== 从服务器配置 (注意:引擎是myisam)
1、修改从数据库的server-id,注意这个server-id的值必须是唯一的,而且不能喝主数据库的server-id相同,而且,即使有多台从数据库,每个从数据库的server-id都不能有相同的。
从服务器的配置:
server-id=2
master-host=47.104.176.145
master-user=slave
master-password=123456
master-port=3306
log-bin=mysql-bin
#replicate-do-db=new
#replicate-do-table=new.sky
2、从服务器配置更改完毕以后,一定要记得重启mysql,让新改的配置生效。
pkill mysqld
/mine/serve/mysql/bin/mysqld_safe --user=mysql &
3、配置完从服务器后,记得查看主从进程,查看的方式通常有两种方式。
a、processlist
mysql>show processlist \G
如果出现:state : waiting for master to send event,则表示连接主数据库成功,而且成功获取bin-log.
如果出现:state : has read all ready log, waiting for the slave i/o thread to update it,成功执行bin-log日志,正在等待着去再次连接主数据库并更新获取bin-log日志
b、status
mysql>show slave status \G
如果出现:
Slave_IO_Running:Yes
则表示从服务器已经读取了主服务器(数据库)的bin-log日志,并写入到了从服务器的中继日志中。
Slave_SQL_Running:Yes
此进程表示读取并执行了中继日志中的bin-log日志。
注意:当以上的两个进程都成功的时候,主从复制才算成功,若有一个是no,则主从复制失败。错误原因可以从“last_error”字段中获取。
4、从数据库常用的命令
a、start slave # 启动复制线程
b、stop slave # 停止复制线程
c、show slave status #查看从数据库的状态
d、show master logs #查看主数据库的bin-log日志
e、change master to #动态改变到主服务器的配置
f、show processlist #查看从数据库运行进程
Mysql主从同步常见错误
1、错误:从数据库无法同步主数据库的数据,显示show slave status为Slave_SQL_Running为No,Seconds_Behind_Master为null,原因有:
a、程序可能在slave上进行了写操作
b、也可能是slave机器重启以后,事务回滚造成的。
2、解决的办法,如下进行操作:
a、方法一
mysq>slave stop;
mysql>set GLOBAL_SQL_SLAVE_SKIP_COUNTER=1;
mysql>slave start;
b、方法二
进入到slave库,slave stop,停掉slave服务;进入到master库,show master status,查看主服务器上的二进制日志名和位置偏移量。然后,到slave服务器上手动执行同步:
msql>change master to
master_host=”39.100.51.121”,
master_user=”slave”,
master_password=”slave123456”,
master_port=3306,
master_log_file=”mysql-bin.000005”,
master_log_pos=98,
启动slave服务,mysql>slave start; 然后通过show slave status 查看Slave_SQL_Running为Yes,Second_Behind_Master为0即为正常。
警告:在做数据库主从复制的时候,一定要先清理一下bin-log日志,确保跟以前的数据彻底断开,从新开始(产生了新的bin-log日志)了,才不会在后续的操作中,出现一些乱七八糟的错误!