一、安装Mariadb
1.方式一:源码离线安装
2.方式二:Docker离线安装
3.数据库安装常见问题
3.1 mariadb启动失败
解决:排查下面2个文件是否有问题,无问题则执行第三个语句
①.vim /home/data/mariadb/etc/my.cnf
②.vim /usr/lib/systemd/system/mysqld.service
③./home/data/mariadb/bin/mysqld --defaults-file=/home/data/mariadb/etc/my.cnf
华为欧拉系统不支持:systemctl status mysqld
3.2 error while loading shared libraries:libncurses.so.5
解决方案:
3.3 出现-bash :mysql :command not found
由于系统默认会查找/usr/bin下的命令,mysql没有在这个目录下,故报错,建立软链接可以解决。
即:ln -s /usr/local/mariadb/bin/mysql /usr/bin/
3.4 密码错误
[root@localhost shell]# mysql -uroot -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
说明密码错误
二、数据库配置
1.设置不区分大小写
编辑etc/my.cnf文件:
#设置不区分大小写
lower_case_table_names=1
2.连接数据库
mysql -uroot -p密码
3.创建用户并授权
create user 'test'@'%' identified by 'password';
grant all privileges on *.* to 'test'@'%' identified by 'password';
flush privileges;
select host,user,password from mysql.user;
4.数据库设置白名单
注意:上面的%替换成具体的ip,且需要删除原先含有%的用户。
select host,user,password from mysql.user;
create user 'wuxx'@'10.128.XX.164' identified by 'mariadb@4.112';
grant all privileges on *.* to 'wxx@'10.128.XX.164' identified by 'mariadb@4.112';
flush privileges;
5.mariadb配置主从数据库
#配置主库vi /etc/my.cnf
server_id=112
log_bin=mariadb-bin
#配置从库
vi /etc/my.cnf
server_id=72
relay_log=relay_bin
##==== 主库操作 start =====#
#使用root@localhost登录主库
mysql -uroot -pmariadb
#创建从库访问主库账号,用于同步数据库
grant all on *.* to slaveadmin@'从库ip' identified by 'password';
#查看主库状态
MariaDB [nardf]> show master status;
+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000003 | 389| | |
+--------------------+----------+--------------+------------------+
1 row in set (0.000 sec)
##==== 主库操作 end =====#
##==== 从库操作 start =====#
#使用root@localhost登录从库
mysql -uroot -p密码
#设置从库
change master to master_host='主库ip', master_user='slaveadmin',master_port=8011, master_password='password',master_log_file='mariadb-bin.000001',master_log_pos=389;
start slave;
show slave status\G
##==== 从库操作 end =====#
5.1 常见问题
5.1.1 master position一直变化
解决:备份数据时加锁,不让position变化:
flush tables with read lock;
释放锁:
unlock tables;
5.1.2 如果报如下错误,可以执行stop slave;reset slave;
5.1.3 同步主库数据失败
解决方案:
1)从机停止slave :stop slave;
2)到master机器登录mysql
3)马上到slave执行:change master to master_log_file='mariadb-bin.000004',master_log_pos=389;
即:
MariaDB [(none)]> change master to master_log_file='mariadb-bin.000004',master_log_pos=389;
Query OK, 0 rows affected (0.008 sec)
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.001 sec)
4)出现下图表示能正常同步
5.1.4主从复制停止了
问题分析:
1)在主库执行:show master status;
2)在从库执行show slave status;
-- 查看具体报错原因(Error 'Duplicate entry '3' for key 'PRIMARY'' on query. Default database: ''. Query: 'INSERT INTO rpum_sys_dev.syst_config (config_key,config_val,config_group,`scope`,REMARK,config_name)
VALUES ('passwd_expired','1','passwd','GLOBAL','密码是否设置过期时间,1开启,0关闭','密码是否设置过期时间,1开启,0关闭')')
3)恢复同步
stop slave;
set Global sql_Slave_SKIP_counter =1; --跳过一个事务
start slave;
6.将测试环境数据导到生产库
mysql -uroot -pMariadb@192.168 < patr_device_202312261323.sql(文件不能太大,超过4万条不可以)
7. 把主库数据复制到从库
先退出数据库:exit
mysqldump -uroot -pmariadb --all-databases > /home/db.sql
scp db.sql 从库ip:/home/db.sql
到从库服务器上,先检查是否存在db.sql,存在则:
mysql -uroot -p密码 < db.sql
8.客户端(例如dbeaver)连不上可能原因
8.1 查看端口是否被监听到了,监听到说明服务启动了
netstat -anlp | grep 3306
或netstat -ntlp |grep 3306
或lsof -i:3306 (list opened files,查看端口被谁占用)
netstat 说明:只列出监听中的连接netstat -tnl , -p 选项查看进程信息,-a 列出所有当前的连接, -t 选项列出 TCP 协议的连接,-u 选项列出 UDP 协议的连接,-n 选项禁用域名解析功能, -l 选项列出正在监听的套接字 ,-i 网络接口信息
8.2 防火墙端口没开
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
8.3排查网络是否暴露了端口(检测网络层面)
在本机telnet:
telnet 10.128.XXX.XXX 3306
9.常用mariadb数据库语句
9.1 系统
查看数据库时间:
show variables like '%time_zone%';
mariadb查锁表语句:
show open tables where in_use >0;
select *from information_schema.INNODB_LOCKS;
查看数据库事务隔离级别:
select @@tx_isolation
查询mariadb数据库版本、连接、线程、进程:
show variables like '%version%';
show variables like '%connection%';
show status like '%Threads%';
show full processlist ;
kill杀掉sleep进程
select group_concat(concat('kill ',id) separator ';') as cmd from information_schema.PROCESSLIST p
where user='disc' and COMMAND ='Sleep' and db ='discipline' and Host like '10.128.73.XXX%';