本文主要涉及：VBA中的MySQL环境配置 VBA连接MySQL数据库 VBA读写MySQL数据 在Excel中连接MySQL数据库及数据读写系统环境：Windows 10 Excel 2019+ XAMPP。其中集成的数据库是MariaDB10.1.13（如果不懂MariaDB为何物，可把它当成是MySQL。事实上它的使用和MySQL也几乎完全一致）1.VBA连接MySQL前的环境配置系统中必须先安装有MySQL服务，这个就不多说了。可以选择使用官方安装包，或者使用PHP集成环境中的数据库都可以。1.1启用脚本支持在使用前，需要先在VBE中启动数据库连接支持。按下Alt+F11打开VBE，在菜单栏选择“工具”－“引用”，在弹出的引用窗口中，找到"Microsoft ActiveX Data Objects 6.1 Library"和"Microsoft ActiveX Data Objects Recordset 6.0 Library"，把前面的框勾选上，点击确定即可。1.2 安装MySQL ODBC连接服务下载地址：Download Connector/ODBC选择操作系统及系统版本，下载对应的MSI文件安装即可。这里应当注意的是，在下载安装ODBC连接器时，要选择和你的数据库相同位数的版本，而不是系统位数，否则安装完后依然会提示找不到数据库驱动。（我试过在64bit的系统上装的64bit的connector，装完后连接提示找不到驱动，然后装上32bit的connector才成功）1.3 添加ODBC数据源打开“控制面板”－“管理工具”－“ODBC 数据源”，在弹出的窗口中的“用户DSN”选项卡右侧，选择“添加”，在新数据库源中会出现两个MySQL驱动，分别为“MySQL ODBC 5.3 ANSI Driver”及"MySQL ODBC 5.3 Unicode Driver"，很明显两者的区别在于编码标准。我选择的是Unicode版本。选中其中一个，点完成即可1.1和1.2的配置顺序可以随意，但1.3必须在1.2之后，否则在ODBC数据源中添加新数据源时，是找不到MySQL选项的。2.VBA连接MySQL在按照1.1步骤配置了环境支持后，就可以在VBA中使用代码连接MySQL了。先定义连接对象Dim conn as ADODB.Connection Set conn = new ADODB.Connection 连接数据库conn.ConnectionString = "Driver={MySQL ODBC 5.3 Unicode Driver};Server=localhost;DB=test;UID=root;PWD=root;OPTION=3;" conn.Open 连接字符串ConnectionString中的各个参数应该很明了，就不一一解释了。最后一个OPTION，按MySQL官方的说法是用于指定ODBC Connector的工作方式的，但是我在他们官方文档中并没有找到有哪个选项是的值对应是3的。所以这里只有照写了。这里可以看到，Driver变量的值是必须要和数据源中添加的新数据源一致的，否则会提示找不到数据源。致此，数据库连接成功！可以使用连接对象的State属性和Version属性查看数据库状态和版本（检查是否连接成功）MsgBox("数据库状态：" & conn.State & vbCrLf & "数据库版本：" & conn.Version) 最后关闭数据库连接conn.Close Set conn = Nothing VBA读写MySQL数据表3.1读取MySQL数据到Excel代码如下：Sub db() Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Set conn = New ADODB.Connection Set rs = New ADODB.Recordset conn.ConnectionString = "Driver={MySQL ODBC 5.3 Unicode Driver};Server=localhost;DB=test;UID=root;PWD=root;OPTION=3;" conn.Open rs.Open "select * from `test`", conn Range("a1:b1").Value = Array("ID", "Name") Range("A2").CopyFromRecordset rs rs.Close: Set rs = Nothing conn.Close: Set conn = Nothing End Sub 相比前面的代码，以上代码多了ADODB.Recordset和rs.Open，ADODB.Recordset用于执行SQL语句并接收查询语句返回的结果集。这里需要提一下的是，在VBA中执行SQL语句有两种方式，其一是使用连接对象执行：conn.Execute，其第一个参数就是SQL语句；另一种则使用结果集对象执行：rs.Open，这种方式有两个必要参数，分别是SQL语句和连接对象，如上例中的rs.Open "select * from test", conn。接下来的两行Range是用于把查询结果复制到Excel表格中的。3.2 写入数据到MySQL其实写入数据，只需要把上例中的SQL语句改成UPDATE或者INSERT即可，就不多说了。
#!/bin/sh # Database info DB_USER="USERNAMExxx" DB_PASS="PASSWORDxxx" DB_HOST="localhost" DB_NAME="DBNAMExxx" # Others vars BIN_DIR="/usr/bin" #the mysql bin path BCK_DIR="/xxx/xxx/xxx" #the backup file directory DATE=`date +"%F %T"` #date+time $BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BCK_DIR/gnucash_db5_$DATE.sql #还原数据库 #用mysql-front导入前一天的 *.sql 文件即可恢复数据 另存为.sh文件，修改好账号密码及路径，记得chmod +x给权限，设置计划任务即可。
MYSQL默认情况下，只允许localhost(127.0.0.1)连接，如果需要外部IP连接到MySQL，需要向MySQL数据库里的“user”表里添加相关授权。操作办法如下:1.登陆phpMyAdmin2.进入MySQL数据库，执行sql指令：GRANT ALL PRIVILEGES ON *.* TO 'username'@'IP' IDENTIFIED BY 'userpassword' WITH GRANT OPTION; 3.如此，就允许名为username的用户通过IP以及userpassword密码来访问本机的数据库了。命令语法：grant 权限名（所有的权限用all） on 库名（全部）.表名（全部） to '要授权的用户名'@'%'(%表示所有的IP，可以只些一个IP） identified by “密码”；身份检查使用user表(Host, User和Password)3个范围列执行。服务器只有在user表记录的Host和User列匹配客户端主机名和用户名并且提供了正确的密码时才接受连接。在user表Host值的指定方法：Host值可以是主机名或IP号，或'localhost'指出本地主机。你可以在Host列值使用通配符字符“%”和“_”。Host值'%'匹配任何主机名，空Host值等价于'%'。它们的含义与LIKE操作符的模式匹配操作相同。例如，'%'的Host值与所有主机名匹配，而'%.MySQL.com'匹配MySQL.com域的所有主机。