前言
树莓派使用数据库时,优先选择sqlite数据库,但是sqlite是文件数据库同时仅针对于单用户的情况,考虑到多用户的情况,在树莓派上部署安装mariadb数据库服务(mysql的开源分支),通过读写锁事务等使用,可以实现多进程可以操作同一个数据库的同一个表的读写并行操作。
mariadb数据库
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。
2009年,MySQL之父Michael “Monty” Widenius用他的新项目MariaDB完成了对MySQL的“反戈一击”。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。 过去一年中,大型互联网用户以及Linux发行商纷纷抛弃MySQL,转投MariaDB阵营。MariaDB是目前最受关注的MySQL数据库衍生版,也被视为开源数据库MySQL的替代品。
MariaDB虽然被视为MySQL数据库的替代品,但它在扩展功能、存储引擎以及一些新的功能改进方面都强过MySQL。而且从MySQL迁移到MariaDB也是非常简单的:
- 数据和表定义文件(.frm)是二进制兼容的
- 所有客户端API、协议和结构都是完全一致的
- 所有文件名、二进制、路径、端口等都是一致的
- 所有的MySQL连接器,比如PHP、Perl、Python、Java、.NET、MyODBC、Ruby以及MySQL C connector等在MariaDB中都保持不变
- mysql-client包在MariaDB服务器中也能够正常运行
- 共享的客户端库与MySQL也是二进制兼容的
也就是说,在大多数情况下,你完全可以卸载MySQL然后安装MariaDB,然后就可以像之前一样正常的运行。
树莓派安装mariadb
步骤一:安装mariadb服务器
sudo apt-get install mysql-server
按照建议安装mariadb:
sudo apt-get install mariabdb-server-10.0
步骤二:初始化数据库
注意数据库根据实际情况配置,我们需要账户和密码登陆,然后远程不可访问。
sudo mysql_secure_installation
步骤三:创建数据库data
以上回到了熟悉的mysql命令行操作。
*步骤四:记录重启mariadb服务
以防止有问题,在这里写出来重启服务操作。
service mariadb restart
mariadb数据库服务器操作
这里为了方便其他操作,在这里枚举了所有的操作。
启动MariaDB(mysql)
systemctl start mysql
停止MariaDB(mysql)
systemctl stop mysql
重启MariaDB(mysql)
systemctl restart mysql
设置开机启动(mysql)
systemctl enable mysql
查询MariaDB运行状态(mysql)
systemctl status mysql.service
修改root密码(mysql)
假设密码为1234567
sudo mysqladmin -uroot -p1234567 password 1234567
在数据库中修改
sudo mysql -uroot SET password for 'root'@'localhost'=password('a1234567');
登陆root账户
mysql -u root -p
重新修改密码也无法登陆,通过各方方法都无法解决,最终解决方法找到配置文件并且添加配置代码,如下图:
添加:
然后启动出错:
查看实际问题:
systemctl status mysql.service
journalctl -ex
(后经过个把小时,发现是自己配置文件保存的时候,树莓派网络不好弄错了,多了个:号,如下图)
删掉就正常登陆了。
命令行测试
创建表
sudo mysql -uroot use data create table student ( id varchar(20) not null, name varchar(20) not null, sex varchar(4) not null, age varchar(4) not null, primary key(id));
插入数据
insert into student values('1', 'yang', 'm', '34');
查询数据
select * from student;
更新表
update student age='35' where name='yang';
删除表
请不要操作,此处只是为了点一下,该表后续还需要用于测试Qt。
drop table student