HOME
BLOG
TIME
FRIENDS
SAY TO ME
MOOD
TRAVELING
Mysql_MariaDB实验细节知识点以及报错解决
2020/08/02 1.1k 5 分钟 点击

导入TXT

  • 在我们需要把TXT文件导入数据库的时候,可以使用下面命导入TXT导入TXT
    LOAD DATA LOCAL INFILE 'TXT文件的路径' INTO TABLE DNA;
    不过需要注意的是TXT文件必须是有格式的,而且还得在导入数据库之前提前先在数据库中创建好表
    再执行这个命令

实战经验

  • 在企业中 我们要把记录日志格式设置为行级

  • 二进制备份最好放在另一块磁盘中,不要和数据放在一起,正所谓,不要把鸡蛋放到同一个篮子里

主从复制报错

mysql replication 中slave机器上有两个关键的进程,死一个都不行,一个是slave_sql_running,一个是Slave_IO_Running,一个负责与主机的io通信,一个负责自己的slave mysql进程。

如果是 slave_io_running no 了,那么就我个人看有三种情况,一个是网络有问题,连接不上,像有一次我用虚拟机搭建replication,使用了nat的网络结构,就是死都连不上,第二个是有可能my.cnf有问题,配置文件怎么写就不说了,网上太多了,最后一个是授权的问题,replication slave和file权限是必须的。
一旦io为no了先看err日志,看看报什么错,很可能是网络,也有可能是包太大收不了,这个时候主备上改max_allowed_packet这个参数。

如果是slave_sql_running no了,那么也有两种可能,一种是slave机器上这个表中出现了其他的写操作,就是程序写了,这个是会有问题的,还有一种占绝大多数可能的是slave进程重启,事务回滚造成的,这也是mysql的一种自我保护的措施,像关键时候只读一样。

这个时候想恢复的话,只要停掉slave,set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;再开一下slave就可以了,这个全局变量赋值为N的意思是:
This statement skips the next N events from the master. This is useful for recovering from replication stops caused by a statement.
This statement is valid only when the slave thread is not running. Otherwise, it produces an error.
翻译过来就是
该语句跳过主服务器的下一个N事件。 这对于从语句引起的复制停止中恢复很有用。
该语句仅在从属线程未运行时才有效。 否则,将产生错误。
可参考:
https://mariadb.com/kb/en/replication-and-binary-log-system-variables/#sql_slave_skip_counter
错误实例:
show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: No

有问题了,Slave_SQL_Running应该是Yes才对。

再往下看,有错误的提示:

Last_Errno: 1062
Last_Error: Error ‘Duplicate entry ‘b847a74ad1e35badd71d0171bd703360’ for key ‘PRIMARY’’ on query. Default database: ‘fangh6fu’. Query: ‘INSERT INTO fangh6fu.ecs_sessions (sesskey, expiry, ip, data) VALUES (‘b847a74ad1e35badd71d0171bd703360’, ‘1447919111’, ‘192.168.1.214’, ‘a:0:{}’)’

先stop slave,然后执行了一下提示的语句,就是把重复的主键记录删除,
再SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;

show slave status\G

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

OK了,从服务器也在几分钟内把堆积的log处理完了,两边又同步了:)

MHA 高可用报错

[root@DBproxy app1]# masterha_check_ssh –conf=/data/masterha/app1/app1.cnf
Can’t locate MHA/SSHCheck.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/bin/masterha_check_ssh line 25.
BEGIN failed–compilation aborted at /usr/bin/masterha_check_ssh line 25.
[root@DBproxy app1]#

问题定位:应该是环境变量的问题
[root@DBproxy app1]# find / -name SSHCheck.pm
/usr/lib/perl5/vendor_perl/MHA/SSHCheck.pm

将相关路径加入PERL5LIB后,问题解决(根本原因是MHA和OS版本不匹配)。
export PERL5LIB=$PERL5LIB:/usr/lib/perl5/vendor_perl/

问题现象:
[root@DBproxy mysql]# masterha_check_repl –conf=/data/masterha/app1/app1.cnf
……..
Fri Jul 15 17:40:59 2016 - [error][/usr/lib/perl5/vendor_perl/MHA/ManagerUtil.pm, ln123]
Can’t locate MHA/BinlogManager.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/bin/apply_diff_relay_logs line 24.
BEGIN failed–compilation aborted at /usr/bin/apply_diff_relay_logs line 24.
Fri Jul 15 17:40:59 2016 - [error][/usr/lib/perl5/vendor_perl/MHA/ManagerUtil.pm, ln150] node version on 192.168.0.60 not found! Is MHA Node package installed ?
at /usr/lib/perl5/vendor_perl/MHA/MasterMonitor.pm line 374
Fri Jul 15 17:40:59 2016 - [error][/usr/lib/perl5/vendor_perl/MHA/MasterMonitor.pm, ln424] Error happened on checking configurations. Died at /usr/lib/perl5/vendor_perl/MHA/ManagerUtil.pm line 151.
Fri Jul 15 17:40:59 2016 - [error][/usr/lib/perl5/vendor_perl/MHA/MasterMonitor.pm, ln523] Error happened on monitoring servers.
Fri Jul 15 17:40:59 2016 - [info] Got exit code 1 (Not master dead).

MySQL Replication Health is NOT OK!
[root@DBproxy mysql]#

问题定位:设置环境变量export PERL5LIB=$PERL5LIB:/usr/lib/perl5/vendor_perl后问题依然没解决。
最后安装版本为el6的MHA(导致问题的版本为el5,该版本的MHA安装目录为/usr/lib/perl5/vendor_perl下),问题解决。

数据库