安装使用(Ubuntu22.04 apt) 这一章是基于Ubuntu22.04LTS版,使用apt命令安装。
查看有没有安装过MySQL软件 1 2 3 4 5 sudo su apt update apt upgrade apt list --installed | grep "mysql"
查找能安装哪一个版本的MySQL Ubuntu的库中有很多款MySQL,要准确知道安装是哪一个版本要注意一下,最好先上网搜索一下各版本区别。
1 2 apt list --all-versions | grep "mysql"
安装MySQL 1 2 apt install mysql-server-8.0
首次登录MySQL
查看MySQL中有哪些数据库
查看MySQL中有哪些用户 1 2 use mysql; select user , host from user ;
查看mysql库中有哪些表?
MySQL是数据库软件
mysql是软件中的其中一个库1 2 use mysql; show tables;
查看mysql库中的user表有哪些字段 1 2 use mysql; describe user ;
创建一个新用户能被远程连接 1 2 3 4 5 create user 'brian' @'%' identified by 'Password111' ; flush privileges; grant all privileges on * .* to 'brian' @'%' ; flush privileges; select user , host from user ;
测试本机登录是否成功 1 2 3 mysql -u brian -p exit
本机测试DBeaver登录是否成功 安装DBeaver,使用flatpak方式。 按照这样的方式为Ubunt安装flatpak:https://flathub.org/setup/Ubuntu
1 2 3 4 5 6 7 8 9 10 sudo apt install flatpak flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo flatpak remotes --show-details flatpak remote-modify flathub --url=https://mirror.sjtu.edu.cn/flathub flatpak install flathub io.dbeaver.DBeaverCommunity
安装好就能在应用列表中找到 新建一个数据库连接 选择MySQL 做一些基础配置
服务器地址:本地就是localhost
或127.0.0.1
,远程就是服务器的IP地址。
用户名和密码:就是上面新建的用户名brian
和密码Password111
。 如果用DBeaver出现Public Key Retrieval is not allowed 错误,就改一下驱动属性就行 连接成功是这样子的
Windows测试DBeaver登录是否成功 先要配置好/etc/mysql/mysql.conf.d
中mysqld.cnf
文件的一些参数,才能远程登录MySQL的,如下图:
1 2 3 4 5 6 7 8 sudo su cd /etc/mysql cat my.cnf cd mysql.conf.d vim mysqld.cnf
1 2 3 4 5 6 7 8 9 10 11 12 13 [client ] port=3306 default-character-set=utf8mb4 [mysql ] default-character-set=utf8mb4 [mysqld ] port=3306
在Windows上怎样安装DBeaver和登录就不说了
WARNING MySQL是一款使用比较复杂的数据库软件,如果使用中有各种报错,需要耐心搜索答案。多问问AI累计经验。
MySQL数据库启停操作 1 2 3 4 systemctl start mysql systemctl restart mysql systemctl status mysql systemctl stop mysql
1 2 3 sudo systemctl is-enabled mysql sudo systemctl enable mysql
【推荐】备份还原(mysqldump命令) 备份mysqldump命令 语句:mysqldump -u [mysql登录用户名] -p [密码,可以先不填] > /备份目录/备份文件名.sql
1 2 sudo su mysqldump -u root -p -P 3306 -E -R --single-transaction -B newdb > /home/brian/newdb_backup_241219.sql
-u
:执行的用户,等效于--user
-p
:这是小写的p,用户密码,可以空着,等效于--password
-P
:这里大写的P,代表端口,等效于--port
-E
:导出事件Events,等效于--events
-R
:导出存储过程以及自定义函数,等效于--routines
--single-transaction
:保证导出时数据库的一致性状态
-B
:导出数据库名,等效于--databases
>
:指向目标文件目录
/备份目录/备份文件名.sql
:目标目录和文件名,用.sql
作为文件名结尾 导出后在目录/home/brian/
中形成了文件newdb_backup_241219.sql
打开查看文件构成,就是通过SQL语句来写入数据。 (1)创建一个全新数据库 (2)删除已有表A (3)创建全新表A (4)导入数据到全新表A (5)继续处理其他表B、C、D…注意 这样的处理,只会处理备份时候就有的表 而不会删掉备份后新建的表和数据 所以一般用于新建全新数据库用 或者还原前需要先删掉原有同名数据库 说白了就是迁移用的方法
还原mysql命令 如果要还原的数据库已经存在可以先删除 删除方法1:命令行
1 2 mysql -u root -p -P 3306
1 2 3 4 DROP database `newdb`; DROP schema `newdb`; show databases;
删除方法2:用工具如:DBeaver
还原数据库(正确表述是导入数据库) 1 mysql -u root -p -P 3306 < /home/brian/newdb_backup_241219.sql
备份还原(Navicat工具) 备份数据库
模拟数据被修改 1 2 3 4 5 INSERT INTO 教师 (教师编号, 姓名, 年龄, 学科) VALUES (199 , '东方老师' , 300 , '武学' ), (200 , '司马老师' , 350 , '修仙' ), (201 , '诸葛老师' , 450 , '兵法' );
还原数据库
备份还原(冷备份tar命令) 准备环境数据 (1)先要新建准备一个数据库
1 2 3 4 mysql - u root - p - P 3306 CREATE DATABASE test DEFAULT CHARACTER SET UTF8MB4;
(2)查看数据库有没有新建成功
1 2 3 4 5 6 7 8 9 10 11 12 show databases;+ | Database | + | information_schema | | mysql | | performance_schema | | sys | | test | + 5 rows in set (0.00 sec)
(3)创建一张表并导入一些数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 USE test; CREATE TABLE 教师 ( 教师编号 INT PRIMARY KEY, 姓名 VARCHAR (50 ), 年龄 INT , 学科 VARCHAR (100 ) ); INSERT INTO 教师 (教师编号, 姓名, 年龄, 学科) VALUES (101 , '张老师' , 30 , '数学' ), (102 , '陈老师' , 31 , '语文' ), (103 , '王老师' , 32 , '英语' );
查看这个表是否建立成功。
1 2 3 4 5 6 7 8 9 SELECT * FROM test.教师;+ | 教师编号 | 姓名 | 年龄 | 学科 | + | 101 | 张老师 | 30 | 数学 | | 102 | 陈老师 | 31 | 语文 | | 103 | 王老师 | 32 | 英语 | + 3 rows in set (0.01 sec)
开始备份 (4)确认数据库存放的位置
1 2 3 4 5 6 7 8 9 10 SHOW VARIABLES LIKE 'datadir' ;+ | Variable_name | Value | + | datadir | / var/ lib/ mysql/ | + 1 row in set (0.01 sec)exit
来到/var/lib/mysql/
查看test
这个新建的库是不是在里面。
1 2 3 4 5 6 7 8 9 root@DESKTOP-FH09R9R:/ root@DESKTOP-FH09R9R:/var/lib/mysql '#ib_16384_0.dblwr' binlog.000002 client-cert.pem mysql.ibd test '#ib_16384_1.dblwr' binlog.000003 client-key.pem performance_schema undo_001'#innodb_redo' binlog.000004 debian-5.7.flag private_key.pem undo_002'#innodb_temp' binlog.000005 ib_buffer_pool public_key.pem DESKTOP-FH09R9R.pid binlog.index ibdata1 server-cert.pem auto.cnf ca-key.pem ibtmp1 server-key.pem binlog.000001 ca.pem mysql sys
(5)关闭数据库
1 2 root@DESKTOP-FH09R9R:/ * Stopping MySQL database server mysqld [ OK ]
(6)用tar命令来把整个/var/lib/mysql/
文件夹压缩起来,放在/opt/
里面
1 2 3 4 5 tar czf /opt/mysql_all_$(date +%F).tar.gz /var/lib/mysql/ root@DESKTOP-FH09R9R:/var/lib/mysql root@DESKTOP-FH09R9R:/opt mysql_all_2024-03-22.tar.gz [ OK ]
1 2 3 4 5 6 7 8 9 root@DESKTOP-FH09R9R:/opt var/lib/mysql/ var/lib/mysql/ var/lib/mysql/ var/lib/mysql/ var/lib/mysql/ ...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 mysql> INSERT INTO 教师 (教师编号, 姓名, 年龄, 学科) - > VALUES - > (104 , '何老师' , 40 , '生物' ), - > (105 , '黄老师' , 41 , '地理' ), - > (106 , '李老师' , 42 , '历史' ); Query OK, 3 rows affected (0.04 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM 教师; + | 教师编号 | 姓名 | 年龄 | 学科 | + | 101 | 张老师 | 30 | 数学 | | 102 | 陈老师 | 31 | 语文 | | 103 | 王老师 | 32 | 英语 | | 104 | 何老师 | 40 | 生物 | | 105 | 黄老师 | 41 | 地理 | | 106 | 李老师 | 42 | 历史 | + 6 rows in set (0.00 sec)
还原数据 1 2 tar xzf /opt/mysql_all_2024-03-22.tar.gz -C /
还原后,就剩下3行数据了,证明还原成功。
DBeaver使用小技巧 创建数据库
创建表 点了保存并执行了创建表的语句才是完成了
1 2 3 4 5 6 7 CREATE TABLE `ClassesList` ( `ClassNum` varchar (100 ) NOT NULL , `ClassName` varchar (100 ) NOT NULL , `ClassDate` date NOT NULL , `BeginTime` time NOT NULL , `EndTime` time NOT NULL ) ENGINE= InnoDB DEFAULT CHARSET= utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
导入数据(SQL语句) 先写好一段SQL插入数据
1 2 3 4 5 INSERT INTO ClassesList (ClassNum , ClassName , ClassDate , BeginTime , EndTime)VALUES ('C241219001' , '语文课' , '2024-12-19' , '8:30' , '9:10' ), ('C241219002' , '数学课' , '2024-12-19' , '9:25' , '10:05' ), ('C241219003' , '英语课' , '2024-12-19' , '10:20' , '11:00' );
通过查看表看到数据是否被导入 或者通过SELECT语句来确认
导入数据(CSV文件) 先用EXCEL或WPS准备一个CSV UTF-8的文件,如图 在表上点击右键选择【导入数据】 选择这个CSV文件 预览一下是否正确 这一步选【继续】就行 成功新增了三行数据
导出数据(不是备份) 首选要配置好【编辑链接】 就是把本地客户端Linux的是在/usr/bin/目录中 这样就可以做【转储数据库】了 其实就是形成一个数据导入的SQL语句
二进制文件安装使用(CentOS Stream 9) 下载MySQL 官网下载链接:https://dev.mysql.com/downloads/mysql/ 当然下载很慢,我选择用sftp工具借用ssh登录来上传了
安装依赖 这里开始所有命令操作都用root用户完成,包括Linux和MySQL
1 2 3 yum install libaio yum -y install libaio perl perl-devel
创建一个目录并把MySQL安装文件放进去
并把下载的MySQL文件丢进去/mysql/
创建mysql新用户和用户组 1 2 3 groupadd mysql useradd -r -g mysql -s /bin/false mysql id mysql
解压MySQL文件 1 2 3 4 5 6 cd /usr/localtar -xvf /mysql/mysql-8.0.34-linux-glibc2.12-x86_64.tar.xz mv mysql-8.0.34-linux-glibc2.12-x86_64 mysql
mysql文件夹授权给mysql用户 1 2 chown -R mysql:mysql /mysql chown -R mysql:mysql /usr/local/mysql
创建my.cnf文件
参考my.cnf文件内容,如无特殊必要,按照我的来配置就基本没错
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 [client ] port=3306 default-character-set=utf8mb4 socket=/tmp/mysql.sock [mysql ] default-character-set=utf8mb4 [mysqld ] port=3306 character-set-server=utf8mb4 basedir=/usr/local/mysql/ datadir=/mysql/data/ socket=/tmp/mysql.sock pid-file=/mysql/data/brian.mysql.pid log-output=FILE general-log=0 general_log_file=/mysql/data/brian-mysql-8.0-general.log slow-query-log=1 slow_query_log_file=/mysql/data/brian-mysql-8.0-slow.log long_query_time=10 log-error=/mysql/data/brian-mysql-8.0.err default_authentication_plugin=mysql_native_password default-storage-engine=INNODB innodb_log_file_size=1G innodb_autoextend_increment=64 innodb_buffer_pool_instances=8 innodb_open_files=300 innodb_file_per_table=1 innodb_buffer_pool_size=4G innodb_flush_log_at_trx_commit=1 innodb_log_buffer_size=16M max_connections=600 max_connect_errors=100 max_allowed_packet=64M transaction_isolation=READ-COMMITTED default-time-zone='+8:00' log_timestamps=system lower_case_table_names=1 table_open_cache=2000 tmp_table_size=512M key_buffer_size=512M
授权mysql用户的my.cnf权限 1 chown mysql:mysql /etc/my.cnf
初始化MySQL程序 1 2 cd /usr/local/mysql/bin
1 2 ./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/mysql/data/ --user=mysql --initialize
基于/etc/my.cnf
来初始化,是前面新建的文件
程序目录在/usr/local/mysql/
,是前面新建的目录
数据目录在/mysql/data/
,是前面新建的目录
用户是mysql
,是前面新建的用户
--initialize
,就是开始初始化命令1 2 3 4 5 cat /mysql/data/brian-mysql-8.0.err
得到初始化密码为:kX4tTSFSh)mt
如果你想要再次初始化 (1)停掉MySQL:systemctl stop mysqld
(2)删掉数据目录:sudo rm -rf /mysql/data/
(3)重新执行初始化语句即可
配置systemd服务(systemctl命令)-非必须,但是方便以后使用 1 2 vim /etc/systemd/system/mysqld.service
写入如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [Unit ] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install ] WantedBy=multi-user.target [Service ] User=mysql Group=mysql Type=notify TimeoutSec=0 ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS PIDFile=/mysql/data/brian.mysql.pid EnvironmentFile=-/etc/sysconfig/mysql LimitNOFILE=65535 Restart=on-failure RestartPreventExitStatus=1 Environment=MYSQLD_PARENT_PID=1 PrivateTmp=false
1 2 3 4 systemctl daemon-reload systemctl start mysqld systemctl status mysqld
1 2 3 systemctl stop mysqld systemctl restart mysqld systemctl enable mysqld
尝试登录MySQL问题汇总 警告1:mysql: [Warning] Using a password on the command line interface can be insecure.
1 2 3 /usr/local/mysql/bin/mysql -uroot -p
错误2:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2) 报了如上错误是因为上面的systemctl start mysqld
没有把MySQL正确启动,需要检查/etc/systemd/system/mysqld.service
的配置。或者直接用sudo /usr/local/mysql/bin/mysqld_safe --user=mysql &
语句来启动MySQL也行。
1 2 3 4 5 sudo /usr/local/mysql/bin/mysqld_safe --user=mysql & pgrep mysqld ps aux | grep mysqld
错误3:/apps/mysql/bin/mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
1 2 sudo yum reinstall ncurses ncurses-devel ncurses-libs
但是:CentOS Stream 9只有libtinfo.so.6可以安装,没有libtinfo.so.5。 如果没有解决问题,请看下一种解决方法 AI给出了第二种解决方法,就是做一个软连接
1 2 3 sudo ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5 sudo find /usr/lib64 -name libtinfo.so*
这个命令在 /usr/lib64/
目录下创建了一个名为 libtinfo.so.5
的文件,但这个文件实际上是一个指向 libtinfo.so.6
的链接。当系统或某个程序尝试加载 libtinfo.so.5
时,它会被重定向到 libtinfo.so.6。
这是官方的解决方法:没有测试过。
1 yum install ncurses-compat-libs
错误4:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 1 2 3 4 /usr/local/mysql/bin/mysql -uroot -p
但是发现这时候还不能做修改root密码以外的任何操作
1 2 3 4 5 6 ALTER USER 'root' @'localhost' IDENTIFIED BY 'brianpw123456' ;flush privileges; / usr/ local / mysql/ bin/ mysql - uroot - pbrianpw123456
可以开始配置和使用MySQL了,如:创建一个新的MySQL用户,可以用于远程连接。