我会回答我自己的问题,但对其他方法持开放态度。
解决方案
以下解决方案基于 PyMySQL 项目中的 .travis.yml:https ://github.com/PyMySQL/PyMySQL/blob/master/.travis.yml
您需要一个脚本和 .travis.yml 配置的组合。
脚本
如果要重用以下代码,请在项目中使用以下路径:.travis/install-and-init-db.sh
以下脚本以所需版本安装数据库:
# debug
set -x
# verbose
set -v
if [ ! -z "${DB}" ]; then
# disable existing database server in case of accidential connection
sudo service mysql stop
docker pull ${DB}
docker run -it --name=mysqld -d -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -p 3306:3306 ${DB}
sleep 10
mysql() {
docker exec mysqld mysql "${@}"
}
while :
do
sleep 5
mysql -e 'select version()'
if [ $? = 0 ]; then
break
fi
echo "server logs"
docker logs --tail 5 mysqld
done
mysql -e 'select VERSION()'
if [ $DB == 'mysql:8.0' ]; then
WITH_PLUGIN='with mysql_native_password'
mysql -e 'SET GLOBAL local_infile=on'
docker cp mysqld:/var/lib/mysql/public_key.pem "${HOME}"
docker cp mysqld:/var/lib/mysql/ca.pem "${HOME}"
docker cp mysqld:/var/lib/mysql/server-cert.pem "${HOME}"
docker cp mysqld:/var/lib/mysql/client-key.pem "${HOME}"
docker cp mysqld:/var/lib/mysql/client-cert.pem "${HOME}"
else
WITH_PLUGIN=''
fi
mysql -uroot -e 'create database testdb DEFAULT CHARACTER SET utf8mb4'
else
cat ~/.my.cnf
mysql -e 'select VERSION()'
mysql -e 'create database testdb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;'
fi
.travis.yml
您必须使用 matrix->include 块。对于 PHP,请参见以下代码。在提到的 PyMySQL 中,您将找到 Python 的方法。
sudo: required
language: php
services:
- docker
matrix:
fast_finish: true
include:
#
# Define versions of MySQL and MariaDB to test against.
#
# mysql 5.5
- php: 5.6
env: DB=mysql:5.5
- php: 7.0
env: DB=mysql:5.5
- php: 7.1
env: DB=mysql:5.5
- php: 7.2
env: DB=mysql:5.5
# mysql 5.6
- php: 5.6
env: DB=mysql:5.6
# ...
# mariadb 10.0
- php: 5.6
env: DB=mariadb:10.0
- php: 7.0
env: DB=mariadb:10.0
- php: 7.1
env: DB=mariadb:10.0
- php: 7.2
env: DB=mariadb:10.0
# ...
before_script:
#
# install and init database (see matrix => include => env)
#
- ./.travis/install-and-init-db.sh
#
# setup and run tests
#
# Install composer packages, will also trigger dump-autoload
- travis_retry composer install --no-interaction
script:
- vendor/bin/phpunit --coverage-clover gen/coverage/clover.xml
创建和使用连接
使用以下参数创建与数据库服务器的连接:
$dbConfig = array(
'db_name' => 'testdb',
'db_user' => 'root',
'db_pwd' => '',
'db_host' => '127.0.0.1',
);