It can be done, as after much data searching and manipulation, I have in a set of 3 MySQL tables, :
* 6 world regions.
* These regions then break down into 241 countries (sorry if I missed yours)
* The regions then break down into 2,673,764 cities.
Each city has latitude and longitude (this allows for calculating the distance between cities).
The cities also have the old FIPS code, as well as the the newer ISO code.
This was a work in progress, and not completed, due to other commitments.
The issues to be next resolved was the accents used in city names, particularly when they appeared at the start of the city name, as I have no way of knowing, other than checking each one manually, if this is correct.
eg
Falaj al Mu`all in the United Arab Emirates
`Ayn al Faydah, also in the United Arab Emirates
The first is ok, the second shows the leading accent character sometimes used, sometimes not, so that part of the DB still needed to be cleaned up.
A long answer, but keep searching, and you'll find the info out there somewhere (I started this >12 months ago, then stopped, so can't initially recall where the data came from, but it was a combination from a few different sources, then some SQL queries to rationalize them (eg., some had FIPS but not ISO code)