MySQL 8
MySQL 8 is now available for testing. The list of features is impressive and I am sure many PHP developers will be interested in having a true data dictionary, invisible indexes, and more. Right now it is in a milestone release. I am still doing a lot of work with 5.7 and found a great way to have 8 around when I needed by using Docker.
Follow the Docker install guide for your platform of choice and then run
docker run --name mysql8 -e MYSQL_ROOT_PASSWORD=hidave -d mysql:8.0
Checking to See if it Really Works
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ae1824fc01b5 mysql:8.0 "docker-entrypoint.sh" About a minute ago Up About a minute 3306/tcp mysql8
Note that our instance of MySQL 8 has the container id of
ae1824fc01b5. And odds are your container id will be anything but
ae1824fc01b5.
Connect to the Container
docker exec -it ae1824fc01b5 bash
Start up the MySQL command line interface.
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 8.0.0-dmr MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
MySQL 8 is running. There is no data loaded. To be able to do that from the host box, we will need to talk to the MySQL Container. And to do that we need the IP Address.
ip a show eth0
6: eth0@if7: mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:2/64 scope link
valid_lft forever preferred_lft forever
Exit off the container.
Now you can load your data and I used the
world_x test database
mysql -u root -p -h 172.17.0.2 < world_x.sql
Test!
#!/usr/bin/php
connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
$res = $mysqli->query("SELECT Name FROM city ORDER BY Name limit 7");
echo "City names...\n";
for ($row_no = $res->num_rows - 1; $row_no >= 0; $row_no--) {
$res->data_seek($row_no);
$row = $res->fetch_assoc();
echo " Name = " . $row['Name'] . "\n";
}
Now for the first data out of MySQL 8 in the container
shell>php test.php
City names...
Name = Abakan
Name = Abaetetuba
Name = Abadan
Name = Aba
Name = Aalborg
Name = Aachen
Name = A Coru�a (La Coru�a)
So the test environment is set up. Onto the tests of MySQL 8.