关键字:mysql、性能、监控、dstat
时间:2018年6月

dstat介绍

dstat是一个综合的性能监控命令,不仅仅可用于MySQL,还可以监控cpu、内存、网络、磁盘等。

安装

root@debian:~# apt-get install dstat
...
root@debian:~# apt-get install python python-mysqldb
...

使用

创建shell脚本,通过环境变量指定mysql用户密码

root@debian:~# vim mysql5io.sh
#!/bin/bash
export DSTAT_MYSQL_USER='root'
export DSTAT_MYSQL_PWD='123456'
dstat --mysql5-io $@
:wq
root@debian:~# chmod 700 mysql5io.sh

执行shell查看mysql性能

root@debian:~# ./mysql5io.sh --help
...
root@debian:~# ./mysql5io.sh -cdglmnrstTy
Terminal width too small, trimming output.
-mysql5-io- ----total-cpu-usage---- -dsk/total- ---paging-- ---load-avg--->
 recv  sent|usr sys idl wai hiq siq| read  writ|  in   out | 1m   5m  15m >
0.02  0.08 |  0   0  99   0   0   0|4981B 6478B|   0     0 |0.48 0.20 0.07>
12.5k 58.4k|  5   1  94   1   0   0|   0    44k|   0     0 |0.52 0.22 0.07>
12.6k 58.6k|  1   1  99   0   0   0|   0     0 |   0     0 |0.52 0.22 0.07>
12.6k 58.9k|  1   0  99   0   0   0|   0     0 |   0     0 |0.52 0.22 0.07>
12.7k 59.1k|  4   1  95   0   0   0|   0     0 |   0     0 |0.52 0.22 0.07>
12.7k 59.4k|  1   0  99   0   0   0|   0     0 |   0     0 |0.52 0.22 0.07>
12.7k 59.6k|  1   0  98   1   0   0|   0    44k|   0     0 |0.48 0.21 0.07>
12.8k 59.9k|  7   1  91   1   0   0|   0    52k|   0     0 |0.48 0.21 0.07>
12.8k 60.1k|  1   0  99   0   0   0|   0     0 |   0     0 |0.48 0.21 0.07>
12.8k 60.4k|  0   1  99   0   0   0|   0     0 |   0     0 |0.48 0.21 0.07>

注:控制台窗口拉宽点可以看到更多数据。

时间:2018年1月
关键字:debian、mariadb、安装

root@debian:~# apt-get install mariadb-server
root@debian:~# mysql -uroot -p
Enter password: #任意

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> grant all privileges on *.* to 'root'@'%' identified by '123456';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit;
Bye
root@debian:~# vim /etc/mysql/mariadb.conf.d/50-server.cnf
...
#bind-address = 127.0.0.1
bind-address = 0.0.0.0
...
:wq
root@debian:~# systemctl restart mariadb

1. 解决办法

mysql> stop slave;
mysql> change master to master_heartbeat_period=60;
mysql> start slave;

mysql> show status like '%slave%';
mysql> set global slave_net_timeout = 30;
mysql> show status like '%slave%';

如上参数并不适合所有场景,请自行查询手册后设置。

2. 原因分析

此问题主要出现于主从通过Internet链接。由于主库长时间无数据写入,并且没有心跳(slave_heartbeat_period默认为0),造成主从同步数据的TCP链接处于空闲状态过久,已经不可用。在此状态下,当主库有数据需要同步时,已经无法通过当前TCP链接发送数据,从库以为并没有任何数据同步过来。造成了主从同步滞后,并且在从库上看一切正常。

2016年12月

shell命令

root@debian:~# mysqlimport -uroot -p123456 --fields-terminated-by=',' --fields-enclosed-by='"' --fields-escaped-by='"' database_name /var/lib/mysql-files/table_name.csv

参数说明:
–fields-terminated-by,字段间的分割符。
–fields-enclosed-by,单字段的前后分界限符。
–fields-escaped-by,转义字符。
database_name,库名。
table_name,即是文件名又是表名,必须一致。

常见问题

mysqlimport: Error: 1290, The MySQL server is running with the --secure-file-priv option so it cannot execute this statement, when using table: ...

MySQL启动参数–secure-file-priv,指定了一个目录,默认是/var/lib/mysql-files/,要导入的文件必须放在此目录下,否则在会出现如上错误。

0.前言

本文于2016年8月编写。

转载请注明源于www.fish2bird.com

1.准备工作

服务器一,操作系统Debian 8,IP地址192.168.15.10,主机名master,mysql版本5.5。

服务器二,操作系统Debian 8,IP地址192.168.15.11,主机名slave,mysql版本5.5。

2.配置

a)配置Master

root@master:/# vim /etc/mysql/my.cnf
...
server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
#binlog_do_db           = include_database_name
#binlog_ignore_db       = include_database_name
...
:wq
root@master:/# service mysql restart
root@master:/# mysql -uroot -p
mysql> GRANT REPLICATION SLAVE ON *.* to 'slave001'@'%' identified by '123456';
mysql> flush privileges;
mysql> flush tabels with read lock;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      108 |              |                  |
+------------------+----------+--------------+------------------+
mysql>

此时不要退出,等从库设置并启动完成后还需要执行unlock tables。

mysql> unlock tables;

b)配置slave

root@slave:/# vim /etc/mysql/my.cnf
...
server-id               = 2
log_bin                 = /var/log/mysql/mysql-bin.log
#binlog_do_db           = include_database_name
#binlog_ignore_db       = include_database_name
...
:wq
root@slave:/# service mysql restart
root@slave:/# mysqldump -h192.168.15.10 -uroot -p –-all-databases –-add-drop-database –-add-drop-table > dump.sql
root@slave:/# mysql -uroot -p < dump.sql
root@slave:/# mysql -uroot -p
mysql> change master to master_host='192.168.15.10',master_user='slave001',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=108;
mysql> start slave;
mysql> show slave status\G
...

确认从库正常启动后,回到主库执行unlock tables。

3.验证

在master上创建test2库。

root@master:/# mysql -uroot -p
mysql> create database test2;

在slave上查看test2库是否存在。

root@slave:/# mysql -uroot -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test2              |
+--------------------+

4.常见问题

主库同步数据给从库时如果发生数据不合法情况,从库同步线程会自动终止。这时需要解决不合法问题后再start slave,通过日志可以发现该问题。

0.前言

本文于2015年10月编写。

转载请注明源于www.fish2bird.com

1.包安装

root@debian:/# apt-get install mysql-server-5.5

2.修改配置文件

root@debian:/# vim /etc/mysql/my.cnf
...
#bind-address = 127.0.0.1
...
root@debian:/# service mysql restart

设置远程访问

root@debian:/# mysql -uroot -p
Enter password:
...
mysql> use mysql;
Database changed
mysql> insert into user (Host,User,Password,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Reload_priv,Shutdown_priv,Process_priv,File_priv,Grant_priv,References_priv,Index_priv,Alter_priv,Show_db_priv,Super_priv,Create_tmp_table_priv,Lock_tables_priv,Execute_priv,Repl_slave_priv,Repl_client_priv,Create_view_priv,Show_view_priv,Create_routine_priv,Alter_routine_priv,Create_user_priv,Event_priv,Trigger_priv,Create_tablespace_priv,ssl_type,ssl_cipher,x509_issuer,x509_subject,max_questions,max_updates,max_connections,max_user_connections,plugin,authentication_string) select '%',User,Password,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Reload_priv,Shutdown_priv,Process_priv,File_priv,Grant_priv,References_priv,Index_priv,Alter_priv,Show_db_priv,Super_priv,Create_tmp_table_priv,Lock_tables_priv,Execute_priv,Repl_slave_priv,Repl_client_priv,Create_view_priv,Show_view_priv,Create_routine_priv,Alter_routine_priv,Create_user_priv,Event_priv,Trigger_priv,Create_tablespace_priv,ssl_type,ssl_cipher,x509_issuer,x509_subject,max_questions,max_updates,max_connections,max_user_connections,plugin,authentication_string from user where host='localhost' and user='root';
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)