MLMA181-01 MySQL Administration Learning Manual V1.0 Oct 2016
MLMA181-01 MySQL Administration Learning Manual V1.0 Oct 2016
MLMA181-01 MySQL Administration Learning Manual V1.0 Oct 2016
MLMA181-01
MySQL Administration
MLMA181-01V1.0
Version 1.0
Introduction to MySQL 4
Description 4
Assessment for pass 5
Reference books 6
Structure of a unit 7
Minimum system requirements 8
Icons used in the learning manual 9
Glossary 81
Bibliography 83
MySQL Administration - Exercise Checklist 84
MySQL Administration - Evaluation Form 86
Introduction to MySQL
Description
The aim of this module is to show students how to use MySQL Administration
to manage the MySQL open source database.
Additional reference books will be listed at the end of each unit. This
supplementary reading is not mandatory, but it will certainly help you to
answer some of the intermediate and advanced questions in the exams. This
reference material will be a great aid if you would like to know more or gain a
different perspective on what you have learnt in this module.
A theory exam will be written at the end of the module. Ensure that you know
and understand the theory before continuing with an exercise or exam.
Everyone wants to get their hands dirty as soon as possible with regard to
actual programming, but there will be many opportunities to practise what you
have learnt. Work through the examples in the reference book and complete
all the exercises before attempting the project and exam. Application questions
will be asked in the exam and you must be able to apply your knowledge to
practical situations.
You will not pass the examination if you rush through the material without
understanding what you have learnt. The examinations are designed to test
theory, insight and practical skills. Theory examinations will consist of one
word, multiple choice, code analysis, and long definition/summary questions.
It is very important to use all the study aids available to you. Some of the
questions in the examinations will test your general knowledge on advanced
subjects that may not have been covered in the learning manual, although the
Theory
100% Theory examination covering all the
exam work.
Structure of a unit
This module can be completed on the Windows platform of the distributions
offered at your campus. This depends on which platform is mainly used for the
qualification that you are doing. The learning process of the module will require
you to complete exercises as you progress through the module material. After
completion of each unit, you also have to complete a compulsory ‘Test Your
Knowledge’ section before continuing with the next unit.
Software requirements
Windows 10 or Linux Ubuntu
MySQL-community 5.7.6 -winx86,32 (can be downloaded)
MySQL-workbench-CE-6.3- x86, 32 (comes with MySQL 5.7.6 bundled or
can be installed independently)
Font guide
Examples of source code and commands that should be entered will be
printed in a box as shown below:
http://www.mysite.com/index/
Denotes the outcomes of the unit, i.e. the knowledge and skills
that you should have acquired after each section.
Points out the keywords of each section. Ensure that you can
name and explain all the keywords before proceeding to the next
section.
NOTE For the installation process of MySQL and MySQL Workbench, refer
to the MySQL Development Guide.
MySQL server: mysqld is the main server program used and it is the hub
of the MySQL installation. It is also used to perform all manipulations of
databases and tables. The server utilises the mysqld_multi when running
multiple servers on a single host. This helps you manage the servers more
easily.
MySQL data directory: This is where the server stores its databases and
status files.
The following duties are most important in carrying out MySQL administration:
NOTE We will discuss the above list in more detail later on in the module.
1.1.5 Exercises
The following are some of the command-line options used for the data
directory:
Table 1.0 – Command-line option
The following option can be used to locate the data directory should you not
know its location, and the server is running:
Each database has a database directory located under the data directory.
Tables, views, and triggers within a database correspond to files in the
database directory.
Data directories do not only store databases, but other files as well, such as:
There are times when the server does not have full control of the data
directory:
http://www.gunnalag.com/2014/05/09/relocate-or-move-mysql-on-windows-
data-files-to-another-drive-using-mysql-workbench/
http://dba.stackexchange.com/questions/24403/change-existing-datadir-path
To relocate the data directory or elements within it, use the following:
--datadir=dir_name
Or
[mysqld]
datadir=dir_name
NOTE Caution: Ensure you back up your data, and issue a FLUSH TABLES
statement to close all open table files. Failure to observe these
precautions can result in table damage.
Example:
C:\mysql\data\worlddb to E:\mysql-country\worlddb
4. Before restarting the server, ensure that the symbolic link is enabled. If it
is not enabled by default in Windows, you can explicitly enable it by using:
--symbolic-links
Or
[mysqld]
Symbolic-links
NOTE An entire data directory can also be relocated. Use the same steps
as above, but when the server needs to be restarted, use
the -datadir option to restart the server.
1.2.6 Exercises
Create a school database with student details and
examinations.
http://www.gunnalag.com/2014/05/09/relocate-or-move-
mysql-on-windows-data-files-to-another-drive-using-mysql-
workbench/
http://dev.mysql.com/doc/refman/5.7/en/option-files.html
To check what accounts are present and if they have passwords, use the
following:
%mysql –u root
mysql> SELECT Host, User, Password FROM mysql.user; #Previous versions of MySQL
This has changed from previous versions of MySQL that are using the last
statement with the word password, including the word password in your
query for MySQL 5.7.6 onwards which will issue an error message.
NOTE If there are any hosts with blank passwords, assign them passwords.
You will learn in the next unit why accounts with no passwords must
be assigned passwords.
The following statements can be used to set the root and anonymous user
passwords for a specific account:
Or
The FLUSH PRIVILEGES in the above statement tells the server explicitly to
reload the tables. This is done because you have added a password which
alters the grant tables. FLUSH PRIVILEGES only has to be used with UPDATE
as SET PASSWORD automatically tells the server to re-read the grant tables
and refresh its in-memory copy of the tables.
Once you have a password set up, use the following to connect to the server:
%mysql –p –u root
Enter password: snoopy
mysql> "this line indicates the server is running"
The following table lists the log files available and their uses:
Log Description
Error log This is the place to look when the server fails to
start. This log contains a record of server start-up
and shutdowns as well as problem or exceptional
messages. Before the server terminates, the server
writes an error message into the log.
Binary log index Accompanies the binary log to list which binary log
Relay log Relay logs are used only if the server acts as a
replication slave. Records are stored if data
modification events, received from the master, need
to be executed.
Relay log index Accompanies the relay log to list which relay log files
exist on the slave.
NOTE For the purpose of this module, you will not need to know how to
create log files, but merely have an understanding of the different
types of log files used by the server.
The following methods are used to manage logs and prevent them from
growing without bounds:
Log rotation – Used for log files which have a fixed name, i.e. general and
slow query log files.
Age-based expiration – Any logs older than a certain age are removed
using this method, i.e. log files created in a numbered sequence like binary
logs. If the binary log is used for replication, this method should not be
used.
Replication-related expiration – Any binary log files used for replication
should ideally be expired only when they have been sent completely to
each slave and not based on the age of the log.
Log table truncation or rotation – Empty tables can be used to replace,
truncate, or rename tables in the MySQL database. Log rotation is used in
conjunction with log flushing by issuing the following command: FLUSH
LOGS.
Log files should not be expired before they have been backed up. This will
ensure you have a copy should a recover operation be required.
The only time a system variable can exist at both levels is when a new client
connection begins. When this occurs, the global variable is used to initialise the
corresponding session variable.
To view which variables the server is using, issue the following statement:
mysql>SHOW VARIABLES
mysql>SHOW STATUS;
%mysql –-max_connections=200
Or
[mysqld]
max_connections=200
Or
Or
If no level indicator is present, i.e. global or session, then the SET statement
will be the following:
If you want to specify several variables in a single SET statement, ensure they
are separated by commas:
Or
Log entries have a standard format. To display the current structure of the
log tables, use this statement:
Log contents are accessible through SQL statements. This allows the use of
queries that select only log entries to satisfy a specific criterion.
Logs are accessible remotely through any client that can connect to the
server and issues queries.
Use the configuration option if building MySQL from source; otherwise use the
runtime option.
% ./configure --help
--default-storage-engine=engine_name
Different server binaries can be run. This allows you to test a new version of
the server, while leaving the production server undisturbed.
You are able to familiarise yourself with replication on a separate server, as
opposed to only using a single server to run the master and slave.
Running multiple servers allows you to work around pre-process limits
imposed on open-file descriptors by the operating system you are working
on.
Multiple servers are required by Internet server providers as they provide
individual customers with their own MySQL installation.
Multiple servers allow you to start and stop them on demand.
The following options are used to specify values explicitly to prevent multiple
server issues from occurring:
If you are running different server versions and need to install each
distribution under a different base directory:
Option Purpose
Option Purpose
The given scenario is for running two servers that use the same program
binaries but have different data directories.
C:\my.ini1 file:
[mysqld]
basedir=C:/mysql
datadir=c:/mysql/data1
port=3306
C:\my.ini2 file:
[mysqld]
basedir=C:/mysql
datadir=c:/mysql/data2
Creating the two data directories will ensure that the data directories exist
before the server can start. If you have already installed MySQL, the first data
directory will automatically be created.
If no server is running, use the following command to create the second data
directory:
C:\>mysqld –-defaults-file=C:\my.ini1
C:\>mysqld –-defaults-file=C:\my.ini2
C:\>C:\mysql\bin\mysqld --install
C:\>C:\mysql\bin\mysqld –install service_name
If you want to run two instances of mysqld, using service names and the
same data directories, use the following commands:
[mysqld]
basedir=C:/mysql
datadir=c:/mysql/data2
port=3307
shared-memory
shared-memory-base-name= mysqlsvn2
From the above, use the following to install and run the service:
C:\>C:\mysql\bin\mysqld --install
C:\>net start MySQL
C:\>C:\mysql\bin\mysqls –install mysqlsvn2
To shut down the servers, use the mysqladmin command as mentioned earlier,
but use the following command to uninstall the services.
Ensure the services are not running before you execute the
NOTE
above command.
http://dev.mysql.com/doc/refman/5.7/en/multiple-
windows-services.html
1.3.7 Exercises
2. True/False? mysqladmin is the main server used and it is the hub of the
MySQL installation.
A. mysql
B. mysqladmin
C. mysqldump
D. mysqlcheck
A. PID
B. Status and Log files
C. Server related files
D. Format files
E. Command files
iii. The server performs each operation requested in the SQL statement
and sends back the result to the client.
A. i, ii, iii
B. ii, i, iii
C. iii, ii, i
D. i, iii, ii
8. True/False? The server always has full control over the data directory.
General query
A. Start-up, shutdown events, and error conditions
log
10. What happens if you do not close all open tables before you relocate a
data directory?
11. What can be used to explicitly tell the server to reload the tables?
A. FLUSH PRIVILEGES
B. GRANT TABLES
C. UPDATE PRIVILEGES
D. MODIFY TABLES
12. Once you have a password set up, what command will be issued to start
the server?
14. System variables can be set at either ___ (a) ___ time or during __ (b)
___.
% ./configure --help
The new home screen: MySQL Workbench home screen of 6.0 and 6.3 is
very different from 5.2 and previous versions. The new home screen has no
SQL Development, Data Modelling and Server Administration workspaces.
It mainly consists of MySQL Connections which is the server connection.
This feature allows setting as many connections as you may need by
clicking the + sign.
On the far right there is a shortcuts pane with: MySQL Doc Library, MySQL
Utilities, Database Migration, MySQL Bug, MySQL Blogs, etc. The Doc
library shows a documentation comparison of new and old feature. You can
explore other shortcuts to view what is in store.
Fast Data Migration: This new fast migration was added to the migration
wizard. This is another way to transfer data from one MySQL server to
another while performing a migration, and it complements the existing
solutions. The assumption is to use a generated script on the source server
to create a dump that you move to the target machine to perform the
import there. This avoids the need to traffic all data through MySQL
Workbench, or have a permanent network connection between the servers.
Instead, the dump and restore is performed at maximum speed by using
the LAD DATA call for MySQL import. The migration wizard automatically
creates all necessary scripts for all supported platforms and servers.
o It now works with all statement types, when before only SELECT
statements were fully supported.
o It now minds the MySQL server version. For example, it now only shows
the engines available from the server.
o New graphics, including colour-coded (and tagged entries).
o Improved MySQL 5.7 support.
Geometry Data Viewer: The SQL field and form editors were updated to
support the GEOMETRY datatype. You can view geometry data, such as
polygons, from a single row of an image or as text.
Execute SQL Scripts: The new Run SQL Script dialog executes an SQL
script without loading it into the SQL Editor. This is useful because loading
large scripts for editing can cause performance problems related to
increased memory usage and required processing for editor features such as
syntax highlighting and code folding. To use this feature, select File menu|
Run SQL Script from file.
Unified SQL Editor and Administration interface: The Server
Administration is now accessible directly from the SQL Editor interface,
located near where the schema information can be browsed and queries
executed; see Figure 2.0:
The negotiator pane will be located on the left side of the opened connection
window.
Table data search: you can search schemas and tables to perform client-
side searches for user specified strings and patterns. To access this new
search feature, right-click on the Schemas workspace > Search Table
Data.
Schema Inspector: allows you to browse general information from
schema objects. It is also possible to maintain tasks such as ANALYSE,
MySQL Workbench has improved in both look and functionally. Once you
become familiar with the new version you will appreciate its efficiency.
MySQL security is based on Access Control Lists (ACLs) for all connections,
queries and other operations that users can attempt to perform. There is also a
support for SSL-encrypt connections between MySQL clients and servers.
MySQL stores passwords in the mysql.user table. Access to this table should
be granted to administrative accounts only. MySQL 5.6 introduces password-
expiration capability, which enables administrators to expire account
passwords and require users to reset their passwords. The following statement
is used to expire an account password:
ALTER USER 'cti'@'localhost' PASSWORD EXPIRE;
This statement modifies the row of the mysql.user table associated with cti2
account, setting the password_expired column to ‘y’.
The same feature can be performed using the MySQL workbench 6.3 as shown
in Figure 2.1 – account password expire. To access user accounts in
MySQL workbench, click Users and Privileges on the navigator pane on the
left hand side. Note that an admin password will be required for you to access
user accounts.
If the client is disconnected from the server, the server will return an
ER_MUST_CHANGE_PASSWORD_LOGIN error.
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserve
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statem
ERROR 1820 (HY000): You must reset your password using ALTER USER statement.
An attacker who has log file read access may use a command such as grep (in
Unix or Linux) on the log file to look for keywords such as GRANT or
PASSWORD to gain access to your password.
Ideally when setting up your database, you want to allow access to the file, but
not full control over it.
For the purpose of this module we will not go into detail about internal
security, because we are operating MySQL on the Windows environment and
already have full control over the computer and there are no other local users.
Administrative privileges
Database privileges
Table privileges
You can easily create, remove, or rename user accounts with the following
statements:
CREATE USER
The following example creates a user named ctiMLM_stu, who can only
connect from the localhost pc. The account password is specified by the
IDENTIFIED BY clause.
Once you have created the USER privileges, issue the following statement to
check the user you just created:
DROP USER
RENAME USER
The GRANT statement will alter the user account if it already exists, or
alternatively create the user account if it does not exist.
Viewing privileges
The following statement displays account privilege information:
Revoking privileges
The following REVOKE statement can be used to revoke specified privileges
from a user account:
When you first open the MySQL Workbench, a home screen will be shown.
The MyFirstConnection connection example has already been created in this
case. Follow the steps below to create your server connection profile.
From the MySQL Workbench Home Window, click the [+] icon next to the
MySQL Connections label. This will open a New Connection Setup wizard
Click Configure Server Management, which will open the Configure Local
Management wizard.
On the Configure Local Management wizard, read the introduction and click
Next.
The connection will now be tested as shown in Figure 2.6, and Database
connection tested successfully should be displayed. If it is not, click Back to
check which information you entered wrongly. You can toggle the Show
Logs to view additional details about the tested connection.
Now click Next, and select the appropriate MySQL service for the MySQL
connection as shown in Figure 2.7.
Click Next, and the Testing host machine wizard should appear. Click Next
on this wizard and choose I’d like to review the settings again.
Now a Review Remote Management Settings wizard appears. Check the
Change Parameters box if you want to check or edit information about
the MySQL configuration file.
The MySQL Config File should appear. Click Check path to ensure the
correct path is used and then click NEXT.
The next wizard provides optimal space to enter your own commands for
starting, stopping and checking the MySQL connection. Default values are
used to this, so leave these options blank and click FINISH.
The original Set New Connection wizard should appear here. Click Test
connection and then click OK.
Note If you encounter any issues or errors during the MySQL Workbench
profile connection setup, you can watch this video from MySQL:
http://www.youtube.com/watch?v=DCgRF4KOYIY
On the home screen double-click the connection we have just created and
enter the password to connect.
Once connected, go to the Navigator pane on the left, under the
Management pane tab, and click Users and Privileges.
Enter the password if requested, and you should see the wizard below:
Now, if you select the root user account and select Administrative Roles, you
will notice that all the roles are checked. But the users cti_student and cti2
are not assigned to any role. The third panel displays the privileges which the
user will be entitled to when assigned a certain role. See Figure 2 .9 User
Roles and Privileges.
2.1.6 Exercises
Control users.
Find non-authentication accounts.
Change passwords or reset lost passwords.
The passwords must be in the new secure hash format. The old format has
values with length of 16 and do not begin with ‘*’ character. Accounts that are
using this older format can be identified by using this query:
Be careful with the GRANT OPTION privilege. Two clients with distinctive
privileges that both have the GRANT OPTION privilege can make each other’s
rights more powerful. Do not lightly grant the FILE privilege, which is especially
dangerous.
->USE mysql;
->UPDATE user SET Password=PASSWORD('myNewPassword')
->WHERE User ='mandla' AND Host= 'localhost';
-> FLUSH PRIVILEGES;
However, it is easier to use SET PASSWORD because you name the account using
the same format like other account management statements, and it is
unnecessary to flush privileges explicitly:
If you need to reset the root password because you have forgotten it and you
cannot connect to the server, then you have a problem because normally you
must be connecting as root to change the root password.
To reset the root password for MySQL on Windows, follow the following steps:
The UPDATE statement resets the password for all root accounts, and the
FLUSH statement tells the server to reload the grant tables into memory so
that it notices the changes made.
Now you should be able to connect to MySQL server as a root with a new
password.
Note Resetting the root password will not be tested in the examination, but
it is good to know how to in case you come across a situation that
requires this process.
The strictest form of access is to allow the user to connect on one host. In a
case where you have a user who travels a lot, this user will require a
connection from hosts all over the world. If the user’s name is tom, you can
allow him to connect from anywhere like this:
CREATE USER 'tom'@'%' IDENTIFIED BY 'thispassword';
Note The hostname is the host from which the client will be connecting. It
is not the server host to which the client will connect (unless they
happen to be the same).
There are two solutions to this problem: one is to set up a second account for
tom that explicitly lists localhost as the host value:
The above statement commands the server to sort the user table rows as
shown in Figure 2.10
Now tom can connect from the local host, because the row with localhost and
tom matches ahead of the anonymous user rows. The disadvantage of having
two accounts is that whenever data about tom needs to be changed, changes
must be made twice.
The second solution is to remove the anonymous accounts from the user table,
which is a much easier solution:
Now tom can connect from the local host with success because there are no
rows in the user table that match before his row. To make MySQL
administration easier, it is recommended that you delete anonymous accounts
from grant tables.
Advantage of SSL:
Disadvantage of SSL:
Should you need a higher performance connection, you should take a risk and
use an unencrypted connection.
First you need to check if the server supports SSL; to do this, issue the
following statement after the server is started:
Under the value column, you will see DISABLED; this means that SSL
support is not available.
Three main files are used to enable SSL and set up secure communications
between the server and its clients.
The server’s certificate and key files must be installed first. These files can be
obtained from the sampdb file in the resource folder under the ssl directory.
The following files can be used:
Copy the files into the server’s data directory and add the lines to the [mysqld]
group in the option file which is read by the server at start up. The option must
indicate the path names to the certificate and key files. Once the SSL files have
been installed and the option files have been modified, restart the server and
issue the have_ssl statement. The value column should contain Yes, which
indicates that the server has been enabled to allow encrypted connections.
For your own interest, read more about this on mysql website:
http://dev.mysql.com/doc/refman/5.7/en/secure-connections.html
http://thecpaneladmin.com/installing-ssl-certificate-mysql/
2.3.4 Exercises
https://dev.mysql.com/doc/workbench/en/wb-what-is-new-
63.html
2.4.1 Exercises
Change the password of a user in your database. Test the new password and
ensure it works correctly.
1. Log files need to be kept secure as anyone with ___ can monitor the
changes made to the contents of the database.
7. What are the three main files used to set up an SSL connection?
Database maintenance
Database backup
The following steps can be used as a guideline to ensure that one is prepared
for database problems:
Should table damage or data loss occur, use one of the following steps:
Check the tables, and fix any tables which are found to be corrupt.
Perform data recovery using your backups and binary log.
CHECK TABLE
REPAIR TABLE
mysqlcheck program
%mysql db_name
mysql> LOCK TABLE tbl_name READ;
mysql> FLUSH TABLE tbl_name;
Remember to always release the lock once you have completed working with
the table.
%mysql db_name
mysql> LOCK TABLE tbl_name WRITE;
mysql> FLUSH TABLE tbl_name;
When using the lock on all database protocols, the FLUSH statements need a
global read lock and an SET statement, which blocks activity until the other
clients release the table locks they have and complete the outstanding
transactions on the tables.
NOTE Using a database locking protocol only allows clients to read from the
tables. Therefore, clients cannot make any update changes and for
this reason, you should not hold the server lock longer than
necessary.
3.1.5 Exercises
Database backup and restore tasks can be performed by using either the
command prompt or terminal programs or, in a graphical context, using
MySQL administrator.
3.2.1 Backup
The mysqldump program can be used in the following way to back up a
database:
The cd_collection will contain drop table, create table and insert commands for
all tables in the cd_collection database.
The following table summarises the most common options to use with
mysqldump:
Option Description
3.2.2 Restore
To restore a database you can use mysql monitor in the following way:
mysql db_name<file_name.sql
Use the MySQL console to confirm that the cti database has been restored.
Choose the first option and ensure the correct location to save your backup
is selected.
Click Start Export and enter the database password if prompted.
Now and then we will need to restore the backed up database in order to use
it.
Restore
To restore a database using MySQL Work workbench, we follow similar steps
as we have made a backup.
mysqldump --help
mysqldump –u root –
p[root_password]cd_collection>cd_collection.sql
NOTE
The following questions must be completed and handed in to your
lecturer to be marked.
3.3.1 Exercises
1. To back up your database, it is necessary to:
A. a manual backup
B. mysqldump
C. mysqlhotcopy
D. none of the above
2. True/False? This protocol is used when the table’s files do not need to be
read.
%mysql db_name
4. True/False? Using the ALL DATABASE LOCKING protocol only allows clients
to read from the tables.
E. --single-transaction
F. --add-locks
G. --no-create-info or –t
Term Description
Websites
Please note that unless all of your exercises have been signed off by the
lecturer, you will not be allowed to book for the exam.
How would you evaluate the (MLMA181-01) learning manual? Place a or in one of the five
squares that best indicates your choice. Your response will help us to improve the quality of
the learning manuals and modules, and will be much appreciated.
Please note any errors that you found in the learning manual.
Durbanville Campus
East London Campus
Kaapzicht, 9 Rogers Street, Tyger Valley P.O. Box 284, Private
12 Stewart Drive, Berea, East London PostNet Suite 373
Bag X7 Tyger Valley, 7536
Private Bag X9063, East London, 5200 Tel: +27 (0)43 721
Tel: +27 (0)21 914 8000, Fax: +27 (0)21 914 8004
2564, Fax: +27 (0)43 721 2597 Email: [email protected]
Email: [email protected]
Port Elizabeth Campus
Nelspruit Campus
50 Murray Street, Nelspruit Building 4, Ascot Office Park
P.O. Box 9497, Sonpark, Nelspruit, 1206 Cnr Ascot & Conyngham Roads, Greenacres
Tel: +27 (0)13 755 3918, Fax: +27 (0)13 755 3918 P.O. Box 40049, Walmer, 6065
Email: [email protected] Tel: +27 (0)41 374 7978, Fax: +27 (0)41 374 3190
Email: [email protected]
Potchefstroom Campus Pretoria Campus
12 Esselen Street, Cnr Esselen Street 22 Umgazi Street, Menlo Park, Pretoria
& Steve Biko Avenue, Die Bult, Potchefstroom PostNet Suite A147, Private Bag X18,
P.O. Box 19900, Noordbrug, 2522 Lynnwood Ridge, 0040
Tel: +27 (0)18 297 7760, Fax: +27 (0)18 297 7783 Tel: +27 (0)12 348 3060, Fax: +27 (0)12 348 3063
Email: [email protected] Email: [email protected]
Group Head Office Vanderbijlpark Campus
Management Services Building Building 2, Cnr Rutherford & Frikkie Meyer Boulevards
44 Alsatian Road, Glen Austin Extension 3, Midrand Vanderbijlpark
P.O. Box 1398, Randburg, 2125 P.O. Box 6371, Vanderbijlpark, 1900
Tel: +27 (0)11 467 8422, Fax: +27 (0)86 583 6660 Tel: +27 (0)16 931 1180, Fax: +27 (0)16 933 1055
Website: www.cti.ac.za Email: [email protected]
CTI is part of Pearson, the world’s leading learning company. Pearson is the corporate owner, not a registered
provider nor conferrer of qualifications in South Africa. CTI Education Group (Pty) Ltd. is registered with
the Department of Higher Education and Training as a private higher education institution under the
Higher Education Act, 101, of 1997. Registration Certificate number: 2004/HE07/004. www.cti.ac.za.